2010-06-25 8 views
1

En Java, que se passe-t-il lorsque vous référencez une classe privée dans un Vector en dehors de la classe?Classe privée dans un vecteur utilisé publiquement

Exemple:

public class A { 
    private class B {} 
    public Vector<B> vector = new Vector<B>(); 

    public A() { 
    vector.add(new B()); 
    } 
} 

public class C { 
    public C() { 
    A a = new A(); 
    a.vector.get(0); // <- What does this return? 
    } 
} 
+0

Essayez-le et voir. – DaveJohnston

+0

D'où viennent tous ces exemples de Vector? Existe-t-il du matériel d'apprentissage prêchant le vecteur au lieu de ArrayList? –

+0

Me demandez-vous? L'exemple est quelque chose que j'ai fouetté. Je n'ai jamais su que ArrayList est plus rapide que Vector. Il ne dit rien dans les javadocs que je puisse trouver. J'ai toujours utilisé Vector en raison de mon arrière-plan C++/STL. –

Répondre

1

Vous pouvez essayer ce code:

public static void main(String[] args) { 
    A a = new A(); 
    Object o = a.vector.get(0); // <- What does this return? 
    System.out.println(o.getClass()); 
} 

La classe est un B $, il sait que B Une classe interne de A.

Mais vous ne pouvez accéder à aucun des membres de B. Par exemple, si vous changez la classe A en:

public class A { 
    private class B { 
     public int x; 
    } 
    public Vector<B> vector = new Vector<B>(); 

    public A() { 
    vector.add(new B()); 
    vector.get(0).x = 10; 
    } 
} 

Vous ne serez pas toujours en mesure de le faire:

public static void main(String[] args) { 
    A a = new A(); 
    System.out.println(a.vector.get(0).x); // this won't compile 
} 

Il dira the type A.B is not visible.

1

Il retourne la référence à un objet de type A B $.

Vous pouvez l'affecter à une référence Object, par ex. Vous pouvez même utiliser la réflexion pour rechercher les propriétés de o.

Juste un rappel général, s'il vous plaît utiliser java.util.ArrayList au lieu de Vector.

1

Il retournera un objet de type A.B Cependant, vous ne pouvez rien faire car vous ne pourrez pas l'assigner à une variable ou appeler des méthodes dessus. Si vous faites:

System.out.println(a.vector.get(0)); 

vous obtiendrez quelque chose comme:

[email protected] 
+1

Si vous ajoutez une méthode toString(), l'impression de toString() sera bien imprimée. Cependant, si vous appelez toString() directement, la compilation échouera. –

Questions connexes