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

Java Discussion :

Nom d'un attribut particulier


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Par défaut Nom d'un attribut particulier
    Bonjour,

    Je ne trouve pas de post qui traite précisément du problème que je rencontre.

    Je voudrait créer une classe avec un exigence de méthode qui retourne le nom d'un attribut particulier (dans mon cas l'attribut est le nom d'une clé primaire dans ma table).
    Utiliser une interface serait approprié pour l'exigence de methode, le problème c'est que je voudrais utiliser cette méthode sans instancier l'objet...

    Exemple classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class table {
     
      String attribut1;
      String attribut2;
      String attribut3;
     
     
     public static String getPrimaryKeyName(){
        return "attribut2";
     
     }
    }
    Le problème ici est que il n'y a aucun contrat qui m'oblige à créer la méthode getPrimaryKeyName() car une interface ne le permet pas..

    Bref je boucle comme un for(i=i)...

  2. #2
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Je ne comprend pas le problème.
    je voudrais utiliser cette méthode sans instancier l'objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String maCle = table.getPrimaryKeyName()
    il n'y a aucun contrat qui m'oblige à créer la méthode getPrimaryKeyName() car une interface ne le permet pas..


    ps : Les noms de classes doivent commencer par une Majuscule

    Au Tentative de réponse : Utiliser le pattern singleton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface ICle{
    String getPrimaryKeyName();
    }
    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
    public class Table implements ICle{
    private String attribut1;
    private static Table instTable = null;
     
    private Table(){ this.attribut1 = "attribut1";} // Constructeur privé
     
    public static Table getInstance(){
    if(instTable = null) { instTable = new Table(); }
    return instTable;
    }
     
    public String getPrimaryKeyName(){
    return attribut1;
    }
    }
    Pour l'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String maCle = Table.getInstance.getPrimaryKey();
    Attention : Tu auras tout le temps un et un seul objet Table.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Par défaut
    dsl pour la majuscule..

    Le problème est que ma classe Table ne dispose pas de constructeur vide de paramètres...

    A prioiri mon énoncé n'est pas clair, en fait pour résumé à l'essentiel:

    je voudrais obliger une classe a disposer d'une methode qui me renvoit une information (disons sur elle même),et sans l'instancier !!
    Un peu comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Table.class.getDeclaredFields()
    pour connaitre les attributs d'une classe sans l'instancier.

    Le but serait de connaitre le nom de l'attribut correspondant à la présumée clé primaire.
    Evidemment, je voudrais obliger toutes les descendantes de la classe Table à avoir sa propre implémentation d'une telle méthode.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par jeffciara Voir le message
    je voudrais obliger une classe a disposer d'une methode qui me renvoit une information (disons sur elle même),et sans l'instancier !!

    [...]

    Evidemment, je voudrais obliger toutes les descendantes de la classe Table à avoir sa propre implémentation d'une telle méthode.
    Pas prévu pour, divers bricolages casses-gueules.

    Pour ce genre de choses il faudrait que chacune de tes classes ait une factory pour l'instancier, et que ce soit cette factory qui s'occupe de donner la getPrimaryKeyName().
    Une idée serait de refondre le code pour faire de la méta-description des tables.
    Ou de se passer d'"obliger" à quoi que ce soit.

    (Note: je suis à peu près sûr qu'une solution à base d'annotations de classes et d'extension de vérification de contraintes à la compilation, serait possible. Mais j'ai pas d'expérience dans le domaine.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Par défaut
    Effectivement, la factory par classe est une solution mais j'aurais voulu travailler que sur ma classe.
    Une idée intermédiaire serait de créer une seule factory qui, en fonction du constructeur de la table, crée une instance de façon dynamique qui serait 'bidon' pour soutirer la methode getPrimaryKeyName().
    Bien sûr, le programme n'aurait pas accès à cet instance qui vit que pour nous fournir l'information PrimaryKeyName.. Ca se tient..

    Par contre je connais pas le principe de méta-description ? (tu parles de base de donnée la non ?)

  6. #6
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Par défaut
    J'ai réussi à ajouter une annotation PrimaryKey.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Colisage implements Table, Serializable {
        @PrimaryKey
        public Integer idColisage;
     
    }
    En créant cette classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        @Target(ElementType.FIELD)
        @Retention(RetentionPolicy.RUNTIME)
        public @interface PrimaryKey {}
    Ensuite dans le code je n'ai plus qu'à verifier qu'un des champs est annoté en tant que PrimaryKey :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Colisage.class.getFields()[0].isAnnotationPresent(PrimaryKey.class)
    Par contre je ne sais pas comment obligé une classe à posséder au moins un champs annoté de type PirmaryKey...

    Est ce que c'est ce que tu veux dire dans :
    extension de vérification de contraintes à la compilation

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par jeffciara Voir le message
    Par contre je ne sais pas comment obligé une classe à posséder au moins un champs annoté de type PirmaryKey...

    Est ce que c'est ce que tu veux dire dans :
    Oui. J'ai entendu parler d'outils qui ajoutent ces vérifications à la compilation.
    Mais c'était d'une oreille distraite, je ne connais ni leurs noms ni comment on s'en sert. J'espérais qu'un habitué viendrais préciser, mais il faut croire que ce n'est pas aussi simple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [MySQL] Insérer des valeurs sans donner le nom de l'attribut
    Par lilington dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 01/12/2008, 08h50
  2. [XSLT] Modification du nom d'un attribut.
    Par tatemilio2 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 21/09/2007, 09h02
  3. Comment récupérer le nom d'un attribut XML ?
    Par mappy dans le forum ASP.NET
    Réponses: 3
    Dernier message: 06/08/2007, 17h26
  4. Probleme de modification du nom d'un attribut
    Par kenny49 dans le forum Access
    Réponses: 4
    Dernier message: 23/06/2006, 14h23
  5. [xslt] passer le nom d'un attribut comme param
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 24/11/2005, 11h03

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