IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

The method clone() from the type Object is not visible


Sujet :

avec Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut The method clone() from the type Object is not visible
    salut,

    J'ai une classe implémentant l'interface Cloneable. J'ai créé une instance de cette classe et je devrais donc avoir accès à la méthode clone de Object ce qui n'est pas la cas.

    x.clone();

    eclipse me renvoie le message
    "The method clone() from the type Object is not visible"

    y a t'il autre chose a faire pour utiliser la méthode clone de Object?

    merci pour votre aide

    satchmoo

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Comment as tu défini ta class implémentant cloneable ??

    Regardes le lien
    http://www.infres.enst.fr/~charon/co...dupliquer.html
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    La méthode clone() est protected et ne peut donc pas être appelée depuis une autre classe.

    Donc la première étape consisterait à redéfinir la méthode clone() pour la rendre public :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class MaClasse implements Cloneable {
    	@Override
    	public Object clone() throws CloneNotSupportedException {
    		return super.clone();
    	}
    }
    Perso j'ai pour habitude de "supprimer" l'exception qui ne doit jamais arriver dès lors qu'on implémente bien Cloneable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class MaClasse implements Cloneable {
    	@Override
    	public Object clone() {
    		try {
    			return super.clone();
    		} catch (CloneNotSupportedException e) {
    			// Ceci ne devrait jamais arriver (on implémente Cloneable)
    			throw new IllegalStateException(e);
    		}
    	}
    }
    L'IllegalStateException n'a pas besoin d'être traité et permet un garde-fou au cas où l'on supprimerait par erreur l'implements Cloneable


    De même, depuis Java il est possible de changer le type de retour (si on respecte les contraintes de la méthode parente), cela permet de déplacer le cast dans la méthode clone() et pas lors de son utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class MaClasse implements Cloneable {
    	@Override
    	public MaClasse clone() {
    		try {
    			return (MaClasse) super.clone();
    		} catch (CloneNotSupportedException e) {
    			// Ceci ne devrait jamais arriver (on implémente Cloneable)
    			throw new IllegalStateException(e);
    		}
    	}
    }

    a++

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Merci
    Salut,

    Merci bcp pour vos explications et pour le lien.

    c'est maintenant très clair pour moi.

    A bientôt

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/05/2015, 19h24
  2. Réponses: 3
    Dernier message: 07/01/2014, 08h55
  3. Réponses: 1
    Dernier message: 24/05/2011, 23h49
  4. Réponses: 15
    Dernier message: 18/02/2009, 18h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo