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 :

Champ de type générique dans une interface


Sujet :

Langage Java

  1. #1
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut Champ de type générique dans une interface
    Salut à tous,

    Comme l'indiquent les spécifications du language, les champs d'une interface (forcément static et final) doivent être initialisés dans l'interface.

    Est-il possible de définir un champ d'un type générique dans une interface? Celui-ci ne serait alors initialisé qu'a la création du premier objet utilisant un type définit... (Je n'ai trouvé aucune documentation laissant supposer que l'on peut créer des champs de type générique dans une interface... Je dois demander l'impossible!!!)

    Pour clarifier tout ça, voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    interface monInterface <T> {
        T monChampStatic; // Aucune solution pour faire accepter cette ligne au compilateur?
    }
     
    class maclasseA implements monInterface<Integer> {
     
        static final Integer monChampStatic = 5;
     
    }
     
    class maclasseB implements monInterface<Double> {
     
        static final Double monChampStatic = 2.8;
    }
    Ce que je veux c'est que la valeur de mon champ static puisse être d'un type qui n'est pas connu à la compilation de l'interface.

    Merci d'avance...

    Edit:
    Il semble bien que ce soit impossible (c'est ce que dit Oracle: Cannot Declare Static Fields Whose Types are Type Parameters).
    J'ai contourné le problème en ajoutant à mon interface une fonction qui retourne la valeur que je voulais attribuer à mon champ static.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Pour information, les champs, static ou non, ne peuvent pas être redéfinis.

    Quand tu faisais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class maclasseA implements monInterface<Integer> {
     
        static final Integer monChampStatic = 5;
     
    }
    Le champ monChampStatic ne "précise pas" le champ monChampStatic de monInterface. C'est juste un tout nouveau champ, qui n'a rien à voir, et qui porte juste le même nom par hasard.
    De ce fait, ce que tu demandais n'était pas seulement impossible. Ça n'avait aucun sens.

    Les méthodes peuvent être redéfinies, c'est le principe de l'héritage. C'était donc la bonne manière d'obtenir quelque chose de ce genre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Merci Pour la précision Thelvin.
    Je pensait qu'on pouvait faire comme en C++ dans les class template où les membres statics ne sont pas statics au niveau du template lui-même, mais au niveau de chaques instances du template pour un type donné du membre static.
    Ici, en java ce n'est donc pas le cas.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    En effet, les génériques Java reprennent une partie de la syntaxe du C++ ou C#, pour servir à la même chose dans les cas simples. Mais ils fonctionnent complètement différemment, et ne sont pas très puissants.
    C'est juste un peu de type safety et de confort syntaxique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par thelvin Voir le message
    En effet, les génériques Java reprennent une partie de la syntaxe du C++ ou C#, pour servir à la même chose dans les cas simples. Mais ils fonctionnent complètement différemment, et ne sont pas très puissants.
    C'est juste un peu de type safety et de confort syntaxique.
    Je ne suis pas trop d'accord avec cela.

    Les Generics de Java ont bien une approche différente des Templates du C++, mais elle n'en est pas pour autant moins puissante.
    Elles ont au contraire également leurs propres avantages (pas de duplication du code, wildcards, rétrocompatibilité).

    En fait chacune est plutôt bien adapté à son langage...


    a++

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

Discussions similaires

  1. Valeur d'un champ de type File dans une page HTML
    Par AlainTech dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/12/2007, 13h17
  2. ALTER TABLE sur un champ de type SET dans une procédure
    Par flaplante dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/08/2006, 04h40
  3. Réponses: 5
    Dernier message: 10/05/2006, 15h47
  4. Réponses: 2
    Dernier message: 03/11/2005, 20h26
  5. Champs de type XML dans une base de données
    Par Flocodoupoil dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 07/07/2004, 18h57

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