Code Smell 266 – Collection Aliasing

To prevent unintended side effects and improve code reliability, use immutable collections in Java. Immutable collections eliminate aliasing issues, enhance predictability, and simplify debugging, making your code more robust and easier to manage.


This content originally appeared on HackerNoon and was authored by Maximiliano Contieri

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<Integer> numbers = List.of(1, 2, 3);
    List<Integer> otherNumbers = numbers; // Aliasing
    otherNumbers.add(4);
    System.out.println(numbers); // Output: [1, 2, 3, 4]
  }
}
public class ImmutableExample {
  public static void main(String[] args) {
    List<Integer> numbers = List.of(1, 2, 3);
    List<Integer> otherNumbers = List.copyOf(numbers); // Creating a copy
    otherNumbers.add(4);
    System.out.println(numbers); // Output: [1, 2, 3]
  }
}

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.

Related Reading

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xviii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxvi

https://hackernoon.com/finding-the-stinky-parts-of-your-code-code-smell-256-mutable-getters

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xiv

More Info

https://hackernoon.com/is-it-crystal-clear-for-everybody-that-a-date-should-not-mutate-wuoy3z03?embedable=true

https://hackernoon.com/nude-models-part-ii-getters-sjo3ua2?embedable=true

https://hackernoon.com/coupling-the-one-and-only-software-designing-problem-9z5a321h?embedable=true

:::warning Disclaimer: Code Smells are my opinion.

:::

:::info Credits: Photo by Martino Pietropoli on Unsplash

:::


If an object is immutable, it can be in only one state, and you win big.

Joshua Bloch

https://hackernoon.com/400-thought-provoking-software-engineering-quotes?embedable=true


:::tip This article is part of the CodeSmell Series on HackerNoon: How to Find the Stinky Parts of your Code

:::

\


This content originally appeared on HackerNoon and was authored by Maximiliano Contieri


Print Share Comment Cite Upload Translate Updates
APA

Maximiliano Contieri | Sciencx (2024-08-29T15:58:16+00:00) Code Smell 266 – Collection Aliasing. Retrieved from https://www.scien.cx/2024/08/29/code-smell-266-collection-aliasing/

MLA
" » Code Smell 266 – Collection Aliasing." Maximiliano Contieri | Sciencx - Thursday August 29, 2024, https://www.scien.cx/2024/08/29/code-smell-266-collection-aliasing/
HARVARD
Maximiliano Contieri | Sciencx Thursday August 29, 2024 » Code Smell 266 – Collection Aliasing., viewed ,<https://www.scien.cx/2024/08/29/code-smell-266-collection-aliasing/>
VANCOUVER
Maximiliano Contieri | Sciencx - » Code Smell 266 – Collection Aliasing. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/08/29/code-smell-266-collection-aliasing/
CHICAGO
" » Code Smell 266 – Collection Aliasing." Maximiliano Contieri | Sciencx - Accessed . https://www.scien.cx/2024/08/29/code-smell-266-collection-aliasing/
IEEE
" » Code Smell 266 – Collection Aliasing." Maximiliano Contieri | Sciencx [Online]. Available: https://www.scien.cx/2024/08/29/code-smell-266-collection-aliasing/. [Accessed: ]
rf:citation
» Code Smell 266 – Collection Aliasing | Maximiliano Contieri | Sciencx | https://www.scien.cx/2024/08/29/code-smell-266-collection-aliasing/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.