[Objet immuable] Comment faire ?
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:
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:
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:
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.