Bonjour,

Je recherche à faire des objets immuables, J'ai trouvé un exemple sur internet mais quelque chose ne me satisfait pas.

Voici mon objet immuable :
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
package smori.ode.webapp.immutables;
 
import java.sql.Date;
 
public final class ImmutableObject {
 
	private Date dateValue;
 
	/**
         * @param dateValue
         */
	public ImmutableObject(Date dateValue) {
		super();
		this.dateValue = dateValue;
	}
 
	/**
         * @return the dateValue
         */
	public Date getDateValue() {
		return new Date(dateValue.getTime());
	}
 
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		StringBuffer stringBuffer = new StringBuffer();
		stringBuffer.append("[ImmutableObject:");
		stringBuffer.append("dateValue=");
		stringBuffer.append(dateValue);
		stringBuffer.append(']');
		return stringBuffer.toString();
	}
 
}
Voici sont utilisation :
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
16
17
18
19
20
 
package smori.ode.webapp.immutables;
 
import java.sql.Date;
import java.util.Calendar;
 
import org.junit.Test;
 
public class ImmutableObjectTest {
 
	@SuppressWarnings("deprecation")
	@Test
	public void testGetString() {
		ImmutableObject immutableObject = new ImmutableObject(new Date(01, Calendar.JANUARY, 01));
		immutableObject.getDateValue().setMonth(Calendar.FEBRUARY);
		System.out.println(immutableObject);
	}
 
 
}
Comme on peut le voir, le getter retournant une copie, mon objet immuable n'est pas modifié. Malheureusement, le développeur peut tenter un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
immutableObject.getDateValue().setMonth(Calendar.FEBRUARY);
Même si cela n'as aucun impacte sur l'objet immuable je souhaiterais interdire ce comportement par exemple par le lancement d'une exception.

Je ne sais pas comment faire, vers quoi m'orienter.

Merci d'avance.
Cordialement, Smori.