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

Langage Java Discussion :

Clonage d'un objet implémentants divers interfaces


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 97
    Points : 104
    Points
    104
    Par défaut Clonage d'un objet implémentants divers interfaces
    bonjour à tous ,

    J'ai un soucis avec le clonage d'un objet qui implémente un ensemble d'interfaces.
    J'ai l'impression que le fait de cloner un objet, le clone sans ses interfaces.
    Est ce correcte?

    Mon projet utilise le RMI et mes objets métiers doivent implémenter une interface qui étends Remote.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public class Personne implements IPersonne{
     
    public Personne() throws RemoteException{
    UnicastRemoteObject.exportObject(this,0);
    }
     
    public Object clone(){
    Personne personne = (personne) super.clone();
    return personne;
    }
     
    }
     
    public interface ipersonne extends Remote{
    }
    En temps normal, je n'ai aucun souci de faire (IPersonne) personne pour me générer un objet de type IPersonne.

    Si je clone un objet Personne et que je le cast, à ce moment, je n'obtiens jamais un objet de type IPersonne mais le clone reste de type Personne.



    Quelque chose m'échappe.

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Un clonage renvoie un objet de même classe que l'origine, donc y compris ses interfaces. De toutes façons il est impossible d'avoir un objet d'une classe donnée dans ses interfaces.

    Donc le clonage d'un objet Toto qui implémente Tata donne forcément et toujours un objet de même classe Toto qui implémente toujours Tata.

    Ainsi on a toujours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    clonable.getClass() == clonable.clone().getClass(); // renvoie true.
    Après, d'où peut venir ton problème ?...

    Déjà je ne sais pas si le I de tes IPersonne veut dire Interface ou Implements. Bon... Je crois que c'est une pratique courante dans le monde JEE, mais bon moi j'y suis pas.

    En tous les cas, si c'est une IPersonne = interface et Personne = implémentation, alors le clone de Personne donnera forcément une classe Personne implémentant IPersonne. Le problème vient d'ailleurs.

    Si IPersonne = implémentation et Personne = interface, alors il peut être normal que le clone de Personne ne donne pas une IPersonne, surtout dans un contexte RMI. Par contre, meme en RMI, le clone de Personne donnera toujours une autre Personne.

    Suis-je clair ?...

  3. #3
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 97
    Points : 104
    Points
    104
    Par défaut
    Je te remercie pour ta réponse.
    J'ai fait un peu de rechercher, test et autre.

    Et je pense avoir compris le problème.

    Dans mon implémentation, au niveau de mes objets métier qui doivent être utilisé à travers RMI, j'avais 2 possiblités, soit étendre ces classes avec UnicastRemoteObject ou dans chaque constructeur terminer avec la méthode static UnicastRemoteObject.ExportObject(this).

    J'ai choisis la deuxieme option car j'ai besoin d'étendre autre chose.

    La phénomène qui se passe quand je clone un de ces objets métier est que la méthode clone n'utilise pas le constructeur de l'objet qui va être cloné et donc ma méthode static n'est pas prise en compte. Ce qui rend mon objet cloné non utilisable à travers Rmi.

    2 solutions s'offrent à moi:

    - J'adapte la méthode clone et je rajoute UnicastRemoteObject.ExportObject(this)
    - Soit une fois que mon clone est créé je le balance dans cette méthode static.

    Voilà :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Objets Automation et Interface
    Par WebPac dans le forum Delphi
    Réponses: 19
    Dernier message: 03/11/2006, 21h57
  2. Réponses: 5
    Dernier message: 26/07/2006, 18h01
  3. [Appli] Recherche d'un type d'objet précis pour interface
    Par superpatate dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 05/08/2005, 13h02
  4. Clonage d'un objet
    Par Dar Shak dans le forum Java ME
    Réponses: 2
    Dernier message: 31/05/2005, 18h06
  5. Objet COM et interface
    Par pio_forum dans le forum Windows
    Réponses: 7
    Dernier message: 08/11/2004, 18h25

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