Bonsoir,

Voilà une question me tarraude concernant les objets immutables. Un objet immutable dans une application single thread est-il obligatoirement Thread-safe Immutable (non modifiables a partir d'un autre Thread)?

Et dans ce cas, qu'est-il possible de faire pour la rendre telle quelle ? Mis à part rendre la classe final pour éviter tout héritage donc toute redéfinition, ainsi que les champs private et final, je ne vois pas ce que je faire d'autre.

De plus, certaines classes du package accèdent à des champs qui sont env visibilité package. Je pensais mettre ces champs en private et final (car ils sont uniquement lus) et synchroniser les accesseurs de ces champs.

Enfin, j'ai remarqué qu'il y avait un souci quand on essaye d'affecter une valeur à un champ final dans le constructeur suivant différents branchements. Je m'explique :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
 
public class Test {
 
    final private int field;
 
    public Test(int testValue) {
        this.field = 1;
 
        if(testValue == 0)
            this.field = 0;        
    }
 
}
J'ai un warning dans eclipse qui m'indique que ce champ a pu être initialisé avant (normal me direz-vous). Y a t-il un moyen de contourner ce problème ?

Si quelqu'un a d'autres suggestions concernant le fait que la classe soit immutable en single-thread et pas en multithread je suis preneur !

Merci d'avance !