Home> Java> javaTutorial> body text

Code Smell - Collection Aliasing

WBOY
Release: 2024-08-30 06:01:02
Original
896 people have browsed it

Exposing your collections couples your solution

TL;DR: Use immutable collections to prevent unintended side effects.

Problems

  • Unpredictable behavior
  • Debugging challenges
  • Data corruption
  • Violation of the Principle of Least Astonishment
  • Premature optimization
  • Unexpected Mutations
  • Concurrency problems
  • Compromised thread safety
  • Increased coupling

Solutions

  1. Use immutable collections
  2. Create immutable classes
  3. Copy the collection before modification
  4. Avoid collection getters
  5. Avoid automatic properties
  6. Favor information hiding and encapsulation

Context

Aliasing happens when two or more variables refer to the same object.

This can lead to unexpected side effects, especially when one variable modifies the shared object.

You can't change immutable collections after creation helping you prevent accidental aliasing.

Premature optimizators will argue that copying collections is an expensive operation that you should avoid.

This is a special case of Object Aliasing

Sample Code

Wrong

public class MutableExample { public static void main(String[] args) { List numbers = List.of(1, 2, 3); List otherNumbers = numbers; // Aliasing otherNumbers.add(4); System.out.println(numbers); // Output: [1, 2, 3, 4] } }
Copy after login

Right

public class ImmutableExample { public static void main(String[] args) { List numbers = List.of(1, 2, 3); List otherNumbers = List.copyOf(numbers); // Creating a copy otherNumbers.add(4); System.out.println(numbers); // Output: [1, 2, 3] } }
Copy after login

Detection

[X] Semi-Automatic

Several static analysis tools can warn you of aliasing abuse.

Tags

  • Immutability

Level

[x] Intermediate

AI Generation

AI code generators might not always create immutable objects by default, especially when working with mutable collections.

You can prompt them to prioritize immutable collections and wrap existing ones to avoid aliasing.

AI Detection

AI tools can analyze code for potential aliasing issues and suggest using immutable collections instead.

Conclusion

You can avoid unintended side effects using immutable collections.

This will make your code more predictable and easier to reason about.

Relations

More Info

Clause de non-responsabilité

Les odeurs de code sont mon opinion.

Crédits

Photo de Martino Pietropoli sur Unsplash


Si un objet est immuable, il ne peut être que dans un seul état, et vous gagnez gros.

Josué Bloch


Cet article fait partie de la série CodeSmell.

The above is the detailed content of Code Smell - Collection Aliasing. For more information, please follow other related articles on the PHP Chinese website!

source:dev.to
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!