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 :

Structure qui n'est pas reconnue


Sujet :

avec Java

  1. #1
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Structure qui n'est pas reconnue
    Structure.ElementWork WorkElement = new Structure.ElementWork();
    provoque No enclosing instance of type Structure is accessible. Must qualify the allocation with an enclosing instance
    of type Structure (e.g. x.new A() where x is an instance of Structure).
    je ne comprends pas, qui peut m'aider?

  2. #2
    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,


    Cela signifie que la classe "ElementWork" est une inner-classe de la classe "Structure", et donc elle est obligatoirement liée à une instance de cette dernière.

    Cette erreur indique que ce n'est pas le cas.

    En gros tu n'as le droit de faire new Structure.ElementWork() qu'à l'intérieur d'une méthode d'instance de la classe Structure.


    Si tu n'as pas besoin de ce lien entre les deux classes, alors cela signifie que la classe ElementWork devrait être déclarée en static.


    a++

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mars 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 21
    Points : 33
    Points
    33
    Par défaut
    Salut,

    J'aime beaucoup la réponse d'AdiGuba qui précise toute l'importance de comprendre la différence entre l'inner classe d'instance et l'inner classe statique.
    Il me semble néanmoins qu'on peut apporter un complément. Il y a des façons de créer des instances d'inner classe non-statique sans être dans une méthode d'instance de l'enclosing class.
    Il suffit dans ce cas de donner une référence sur l'objet qui doit contenir (encloser ?) l'inner instance. Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myEnclosingInstance.new InnerClass(
    En tout cas il est très important de se poser la question de ce que l'inner objet doit accéder:
    • des champs statiques de l'enclosing classe dans ce cas là Inner Class statique
    • des champs de l'enclosing object dans ce cas là Inner Class d'instance


    ci-dessous un petit exemple qui a été assez drôle à préparer pour donner une idée des possibilités par rapport aux inner classes statiques ou d'instance et différentes façons de créer ces instances en utilisant du code externe à l'enclosing object.
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationTargetException;
    import java.util.Collection;
    import java.util.LinkedList;
     
    public class TestInner {
     
    	public class InnerInstance {
    		public int getEnclosingTestId(){
    			return TestInner.this.myId;
    		}
    	}
     
    	public static class InnerStatic {
    		public int getLastId(){
    			return TestInner.lastId;
    		}
    	}
     
    	private static int lastId = 0 ;
     
    	private int myId;
     
    	public TestInner() {
    		super();
    		this.myId = TestInner.lastId++; 
    	}
     
    	public static void main(String args[]) {
    		// Créer des objets internes statiques 
    		InnerStatic stat1 = new InnerStatic();
    		System.out.println("Nombres de TestInner déjà créés : " + stat1.getLastId());
     
    		// Créer des objets internes d'instances 
    		Collection<InnerInstance> innerClasses = new LinkedList<>();
    		for (int i=0;i<=4;i++){
    			TestInner enclosingClass = new TestInner();
    			innerClasses.add(enclosingClass.new InnerInstance());
    		}
    		for (InnerInstance anInner:innerClasses){
    			System.out.println("Numéro de l'instance de TestInner contenant l'inner class : "+anInner.getEnclosingTestId());
    		}
     
    		// Créer des objets internes statiques
    		InnerStatic stat2 = new InnerStatic();
    		System.out.println("Nombres de TestInner déjà créés : " + stat1.getLastId());
    		System.out.println("Nombres de TestInner déjà créés : " + stat2.getLastId());
     
    		// Créer des objets internes d'instances en utilisant la refexivité
    		Constructor<InnerInstance> cst;
    		try {
    			cst = InnerInstance.class.getConstructor((Class[]) new Class[]{TestInner.class});
    			InnerInstance ist = cst.newInstance((Object[]) new Object[]{new TestInner()});
    			System.out.println("Numéro de l'instance de TestInner contenant l'inner class : "+ist.getEnclosingTestId());
    		} catch (InstantiationException | IllegalAccessException
    				| IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
    			e.printStackTrace();
    		} 
    	}
    }
    a+

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

Discussions similaires

  1. OE ligature qui n'est pas reconnu dans ma JSP
    Par vain_mich dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 01/08/2008, 14h05
  2. Fonction qui n'est pas reconnue
    Par petitours dans le forum IHM
    Réponses: 4
    Dernier message: 17/08/2007, 15h28
  3. Réponses: 8
    Dernier message: 04/08/2004, 14h17
  4. LIKE de tout ce qui n'est pas compris entre a<-&
    Par DjinnS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/07/2003, 13h09
  5. [VB6] générer un recordset qui n'est pas lier à un bdd
    Par damyrid dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/06/2003, 17h48

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