Java - Pas enfermer instance de type Foo est accessible
J'ai le code suivant:
class Hello {
class Thing {
public int size;
Thing() {
size = 0;
}
}
public static void main(String[] args) {
Thing thing1 = new Thing();
System.out.println("Hello, World!");
}
}
Je sais Thing
ne fait rien, mais mon Bonjour, Monde programme compile très bien sans elle. C'est seulement mon défini les classes qui échouent sur moi.
Et il refuse de compiler. Je reçois No enclosing instance of type Hello is accessible."
à la ligne qui crée une Chose nouvelle. Je devine que ce soit:
- J'ai des problèmes au niveau du système (que ce soit dans DrJava ou mon Java installer) ou
- J'ai quelques base de l'incompréhension de la façon de construire un programme de travail en java.
Des idées?
- double possible de Java intérieur de la classe et statique de la classe imbriquée
Vous devez vous connecter pour publier un commentaire.
static class Thing
fera de votre programme de travail.Comme il est, vous avez
Thing
intérieur de la classe, ce qui (par définition) est associée à une instance particulière deHello
(même si elle n'utilise jamais ou se réfère à elle), ce qui signifie que c'est une erreur de direnew Thing();
sans avoir un particulierHello
exemple dans le champ d'application.Si vous déclarez une classe statique au lieu de cela, alors que c'est une "niche" de la classe, qui n'a pas besoin d'un particulier
Hello
instance.outer class
, lenon-static inner class
serait créé ainsi, même si je ne l'utilise pas n'importe où?Vous avez déclaré la classe
Thing
comme un non-statique à l'intérieur de la classe. Cela signifie qu'il doit être associé à une instance de laHello
classe.Dans votre code, vous essayez de créer une instance de
Thing
à partir d'un contexte statique. Qu'est ce que le compilateur se plaint.Il y a quelques solutions possibles. La solution à utiliser dépend de ce que vous voulez atteindre.
Déplacer
Thing
de laHello
classe.Changement
Thing
être unstatic
classe imbriquée.Créer une instance de
Hello
avant de créer une instance deThing
.La dernière solution (un non-statique classe imbriquée) serait obligatoire si toute instance de
Thing
dépendait d'une instance deHello
pour être significatif. Par exemple, si nous avions:toutes premières tentatives de création d'un objet de la classe
Thing
, comme dans:serait problématique, car il n'y aurait pas évident
enormous
valeur de 31 contre elle. Une instanceh
de laHello
extérieur de la classe est nécessaire de fournir cetteh.enormous
valeur:Parce que ce n'est pas une
Thing
si elle n'a pas unHello
.Pour plus d'informations sur imbriquée/classes internes:
Classes Imbriquées (La Java Des Tutoriels)
Thing thing1 <<HelloInstantiation>>.new Thing()
est la clé. J'ai passé quelques minutes à confondre l'aide de la syntaxeThing thing1 new <<HelloInstantiation>>.Thing()
. =PBien... donc beaucoup de bonnes réponses, mais je veux ajouter plus sur elle. Un bref coup d'oeil sur l'Intérieur de la classe en Java - Java nous permet de définir une classe dans une autre classe et d'
La possibilité de placer les classes de cette manière a certains avantages:
Il peut cacher(Il augmente l'encapsulation) la classe des autres classes - particulièrement pertinent si la classe est uniquement utilisé par la classe à laquelle il est contenu à l'intérieur. Dans ce cas, il n'est pas nécessaire pour le monde extérieur pour le savoir.
Il peut faire code plus maintenable que les classes sont logiquement regroupés autour de l'endroit où ils sont nécessaires.
L'intérieur de la classe a accès pour les variables d'instance et les méthodes de sa classe conteneur.
Nous avons principalement trois types de
Inner Classes
Certains des points importants à se rappeler
Essayons de voir les concepts ci-dessus practically_
J'espère que ce sera aide à tout le monde. Veuillez reportez-vous pour plus de
Permet de comprendre avec l'exemple simple suivant.
Cela arrive parce que c'est NON-STATIQUE à l'INTÉRIEUR de la CLASSE. Vous devriez besoin de l'instance de l'extérieur de la classe.
Thing
est un intérieur de la classe avec une connexion automatique à une instance deHello
. Vous obtiendrez une erreur de compilation car il n'existe aucune instance deHello
pour vous attacher. Vous pouvez le fixer plus facilement en modifiant à un statique de la classe imbriquée qui n'a pas de connexion: