Toujours en m'instruisant sur le java, je suis arriver dans le chapitre traitant des interfaces, donc innevitablement de Cloneable. Et je me suis demander ce que voulait dire de faire super.clone() a ce que je comprend ca appel sa fonction de clone par default mais je ne suis pas sur.
Ensuite, bien sur en general il vaut mieux de prendre un clone lorsqu'on demande un objet lors d'un getXxx (afin d'eviter que qqun modifie la classe avec laquelle on travail). Donc je me demandais s'il etait bon egalement de le faire sur un setXxx pour les memes raisons?
Voila donc le code de deux classes utilisant les deux sujets de discution:
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
39
40
41
42
43
44
45
46 //DummyClass.java import java.util.Date; public class DummyClass implements Cloneable { //fields private Date dummyField; //accessors public Date getDummyField() { return (Date)this.dummyField.clone(); } public void setDummyField(Date dummyField) { this.dummyField = dummyField; } //constructors public DummyClass(Date dummyField) { this.dummyField = dummyField; } public DummyClass() { this(new Date()); } //methods public String toString() { return String.format("%tF", this.dummyField); } public DummyClass clone() throws CloneNotSupportedException { DummyClass cloned = (DummyClass)super.clone(); cloned.dummyField = (Date)this.dummyField.clone(); return cloned; } }
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 //LaunchDummy.java import java.util.Date; public class LaunchDummy { public static void main(String[] args) { Date dateDummy = new Date(40000000); DummyClass crashDummy = new DummyClass(dateDummy); DummyClass crashDummy2 = new DummyClass(); System.out.println(crashDummy); //retourne 1970-01-01 try { crashDummy2 = crashDummy.clone(); } catch (CloneNotSupportedException e) { System.out.println("Error! " + e); } dateDummy.setTime(0); System.out.println(crashDummy); //retourne 1969-12-31 System.out.println(crashDummy2); //retourne 1970-01-01 } }