Fonction clone() de java

Résolu
xman_genius Messages postés 97 Statut Membre -  
 moi -
slt;
j'ai un probleme avec la fonction clone()
et c'est qqn peut m'indiquer la correction merci d'avance
---------------------code-------------------------------
import java.lang.Object;
class java_test
{
public static void main(String[] args)
{
class personnel
{
String nom=new String();
String prenom=new String();
short age;
}
personnel personne1=new personnel();
personnel personne2=personne1.clone();
}
}
----------erreurs afficher par l'editeur JCreator---------
error 1:clone() has protected access in java.lang.Object
error 2:incompatible types

2 réponses

  1. TheExpert
     
    pour pouvoir utiliser la methode clone() il faut que ta classe implemente l'interface cloneable du package java.lang, et il n'est pas necessaire d'importer explicitement le package java.lang, c fait automatiquement par le compilateur. avant de te donner une solution, je tiens à te dire que ton programme est mal structuré : ta définie une classe (classe Personnel) à l'interieur d'une methode (main). Donc une bonne version de ton programme serai :

    class Personne implements Cloneable{ // implementation de l'interface Cloneable
    private String nom;
    private String prenom;
    private int age;

    //Constructeur pour initialiser les champs prives nom et prenom
    public Personne(String unNom, String unPrenom){
    nom = unNom;
    prenom = unPrenom;
    }

    // un autre constructeur qui accepte aussi l'age
    public Personne(String unNom, String unPrenom, int unAge){
    nom = unNom;
    prenom = unPrenom;
    age = unAge;
    }

    // la methode clone peut generer une exception CloneNotSupportedException
    public Object clone() throws CloneNotSupportedException{
    return super.clone();
    }

    public static void main(String[] atgs){
    Personne myFriend = new Personne("MyFriend","TheExpert");
    Personne myFriendClone = null;
    try{
    myFriendClone = (Personne) myFriend.clone(); // il faut réaliser un caste car la methode clone renvoie un Object.
    }catch(Exception e) {
    System.out.println("Erreur");
    }

    System.out.println(myFriend.nom + " " + myFriend.prenom);
    System.out.println(myFriendClone.nom + " " + myFriendClone.prenom);
    }
    }

    et voila c fini.
    By TheExpert
    9
    1. moi
       
      utilisation du mot clef "this" dans le deuxième constructeur pour réutiliser la définition du premier sans avoir à réécrire les mêmes lignes de code. ^^
      0
  2. anawak Messages postés 59 Statut Membre 9
     
    ben tu t'es un epu gouré.
    clone() est une methode de la cloneable ,alors si tu veux utiliser close() procede comme suit:

    public YourClass extends cloneable {
    //declaration
    //construteur

    public YourClass getOtherInstance(){
    -4