Source de Clone1.java
import java.util.*;
public class Clone1 {
public static void main(String[] args) {
Vector vect = new Vector();
Puce1 puce = new Puce1("pupuce");
vect.add(puce);
Vector vectClone = (Vector) vect.clone();
System.out.println("element 0 du vecteur clone : "
+ vectClone.elementAt(0));
puce.nom = new String("zezette");
System.out.println("changement de string"
+"\nelement 0 du vecteur original : "
+ vect.elementAt(0)
+"\nelement 0 du vecteur clone : "
+ vectClone.elementAt(0));
}
}
class Puce1 {
String nom;
public Puce1(String n) {
nom = n;
}
public String toString() {
return super.toString() + " : " + nom;
}
}
|
|
EXECUTION
|
|
Source de Clone3.java
import java.util.*;
public class Clone3 {
public static void main(String[] args) {
Puce3 mapuce = new Puce3("pupuce");
System.out.println("puce : " + mapuce);
mapuce.nom = new String("zezette");
System.out.println("changement de nom de mapuce"
+"\nmapuce : " + mapuce);
Puce3 puceClone = (Puce3) mapuce.clone();
System.out.println("puce clone : " + puceClone);
mapuce.nom = new String("fifine");
System.out.println("changement de nom de mapuce"
+"\npuce clone : " + puceClone);
}
}
class Puce3 implements Cloneable {
String nom;
public Puce3(String n) {
nom = n;
}
public String toString() {
return super.toString() + " : " + nom;
}
public Object clone() {
try {
return super.clone();
}
catch (CloneNotSupportedException e) {
throw new InternalError(e.getMessage());
}
}
}
|
EXECUTION
|
|
public Object clone() {
return new Puce3(new String(nom));
// et non pas nom.clone() !
}
Source de Clone2.java
import java.util.*;
public class Clone2 {
public static void main(String[] args) {
Vector vect = new Vector();
Puce2 puce = new Puce2("pupuce");
vect.add(puce);
Vector vectClone = (Vector) vect.clone();
System.out.println("element 0 du vecteur clone : "
+ vectClone.elementAt(0));
puce.nom = new String("zezette");
System.out.println("changement de string"
+"\nelement 0 du vecteur original : "
+ vect.elementAt(0)
+"\nelement 0 du vecteur clone : "
+ vectClone.elementAt(0));
}
}
class Puce2 implements Cloneable {
String nom;
public Puce2(String n) {
nom = n;
}
public String toString() {
return super.toString() + " : " + nom;
}
public Object clone() {
try {
return super.clone();
}
catch (CloneNotSupportedException e) {
throw new InternalError(e.getMessage());
}
}
}
|
EXECUTION
|
|
public Object clone() {
try {
Puce2 p = (Puce2) super.clone();
p.nom = new String(nom);
}
catch ....
}
Source de Clone5.java
import java.util.*;
import java.io.*;
public class Clone5 {
public static void main(String[] args) {
Vector vect = new Vector();
Puce5 mapuce = new Puce5("pupuce");
vect.add(mapuce);
vect.add(new Puce5("zezette"));
vect.add(mapuce);
System.out.println("vector : ");
for (int i=0 ; i < vect.size(); i++)
System.out.println(" - " + vect.elementAt(i));
try {
Vector vectClone = (Vector) serialClone(vect);
System.out.println("vector apres serialClone: ");
for (int i=0 ; i < vectClone.size(); i++)
System.out.println(" - " + vectClone.elementAt(i));
}
catch(Exception e) {
System.out.println(e.getMessage());
}
}
static Object serialClone(final Serializable objet)
throws IOException, ClassNotFoundException
{
final PipedOutputStream pipeOut = new PipedOutputStream();
PipedInputStream pipeIn = new PipedInputStream(pipeOut);
Thread serialiseur = new Thread()
{
public void run() {
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(pipeOut);
out.writeObject(objet);
}
catch(IOException e) {}
finally {
try {
out.close();
}
catch (Exception e) {}
}
}
};
serialiseur.start();
ObjectInputStream in = new ObjectInputStream(pipeIn);
return in.readObject();
}
}
class Puce5 implements Serializable {
String nom;
public Puce5(String n) {
nom = n;
}
public String toString() {
return super.toString() + " : " + nom;
}
}
|
vector : - Puce5@bd0108 : pupuce - Puce5@8ed465 : zezette - Puce5@bd0108 : pupuce vector apres serialClone: - Puce5@e7b241 : pupuce - Puce5@167d940 : zezette - Puce5@e7b241 : pupuce |
Source de Clone4.java
import java.util.*;
public class Clone4 {
public static void main(String[] args) {
Puce4 mapuce = new Puce4("pupuce");
System.out.println("puce : " + mapuce);
Object puceClone = mapuce.clone();
System.out.println("puce clone : getClass= "
+ puceClone.getClass());
PuceSavante4 einstein = new PuceSavante4("albert");
System.out.println("puce savante : " + einstein);
Object einsteinClone = einstein.clone();
System.out.println("puce savante clone : getClass= "
+ einsteinClone.getClass());
Poux4 monpoux = new Poux4("pouh");
System.out.println("poux : " + monpoux);
Object pouxClone = monpoux.clone();
System.out.println("poux clone : getClass= "
+ pouxClone.getClass());
PouxRepus4 poupou = new PouxRepus4("poupou");
System.out.println("poux repus : " + poupou);
Object poupouClone = poupou.clone();
System.out.println("poux repus clone : getClass= "
+ poupouClone.getClass());
}
}
class Puce4 implements Cloneable {
String nom;
public Puce4(String n) {
nom = n;
}
public String toString() {
return super.toString() + " : " + nom;
}
public Object clone() {
try {
return super.clone();
}
catch (CloneNotSupportedException e) {
throw new InternalError(e.getMessage());
}
}
}
class PuceSavante4 extends Puce4 {
public PuceSavante4(String n) {
super(n);
}
int compte() {
return (int)(Math.random()*100);
}
}
class Poux4 implements Cloneable {
String nom;
public Poux4(String n) {
nom = n;
}
public String toString() {
return super.toString() + " : " + nom;
}
public Object clone() {
return new Poux4(new String(nom)); // MAUVAIS !
}
}
class PouxRepus4 extends Poux4 {
public PouxRepus4(String n) {
super(n);
}
void rote(String rot) {
System.out.println(rot);
}
}
|
puce : Puce4@1add2dd : pupuce puce clone : getClass= class Puce4 puce savante : PuceSavante4@11a698a : albert puce savante clone : getClass= class PuceSavante4 poux : Poux4@7ced01 : pouh poux clone : getClass= class Poux4 poux repus : PouxRepus4@765291 : poupou poux repus clone : getClass= class Poux4 |