Je suis nouveau à Java (avoir une expérience avec C #),
C'est ce que je veux faire: p> qui donne cette erreur dans Eclipse: < / p> Aucune instance de joint de type bitmapEft est accessible. Doit qualifier l'allocation avec une instance de type de type bitmapeffects (E.G. X.New a () où X est une instance de bitmapeffects). P>
BlockQuote> Ceci est possible dans C # avec des classes statiques, comment devrait-elle être faite ici? p> p>
4 Réponses :
Essayez de définir myRelatedClass code> comme statique. P>
Plus sur le sujet
http://java.sun.com/docs/books/ Tutoriel / Java / Javaoo / Netd.html P>
Je ne veux pas que MyRelatedClass soit statique, j'ai besoin de plusieurs instances de celui-ci.
@Mervin Veuillez lire la description dans le lien (ou la réponse de Matt). Si la classe intérieure est «statique», cela ne signifie pas qu'il n'y a qu'un exemple de celui-ci. Cela signifie que MyrelatedClass ne sera associé à une instance particulière de MyClass et ne sera pas en mesure d'accéder à ses membres (classe de classe des parents).
@Mervin - Ce n'est pas ce que signifie statique dans ce contexte. Cela se comporte efficacement comme une classe de niveau supérieur, même s'il est imbriqué dans MyClass.
Eh bien, j'essaie d'accomplir ce que je peux faire en C #: //[MapManagement.cs] Espace de noms MapManagement {Public Static Class MapManager {...} Classe publique SpécialMapfile {...}} Je veux 2 classes (non statique ) dans un fichier 1, en quelque sorte en Java, ce n'est pas autorisé .. Erreur: "Le nom de type public doit être défini dans son propre fichier" Alors c'était ma solution à cela, je veux 1 paquet et je veux avoir une classe associée groupé dans leur propre fichier -
Java veut beaucoup que vous ayez une classe publique par fichier. Il est fortement recommandé de rester avec cela, plutôt que d'essayer de pirater.
Comment vous avez défini typiquement en Java, vous utilisez ce motif lors d'une instance de Quelque chose comme ça devrait compiler: P> myRelatedClass code>, vous devez avoir une instance de em> myClass code> pour pouvoir accéder / instancier cette classe. myRelatedClass code> AVERTISSEMENT DE COMPILTEON). P> public void doStuff() {
MyClass mc = new MyClass();
MyRelatedClass data = mc.new MyRelatedClass();
}
Création d'une classe intérieure (non statique) sur quoi que ce soit autre qu'un implicite, ce code> me rend malade.
Eh bien, j'essaie d'accomplir ce que je peux faire en C #: //[MapManagement.cs] Espace de noms MapManagement {Public Static Class MapManager {...} Classe publique SpécialMapfile {...}} Je veux 2 classes (non statique ) dans un fichier 1, en quelque sorte dans Java, ce n'est pas permis .. Erreur: "Le type public nom i> doit être défini dans son propre fichier", c'était donc ma solution à cela, je veux 1 paquet et je veux avoir une classe associée groupée dans leur propre fichier
@Mervin Comme vous l'avez vu, Java n'autorise qu'une classe publique de niveau supérieur par fichier. Les classes associées peuvent simplement être définies dans le même package, dans des fichiers séparés.
Oui, les classes imbriquées non statiques ont accès aux membres de la classe externe et doivent donc être créés pour une instance de la classe extérieure. Donc, vous avez deux choix: p>
En pratique, je crée rarement une instance de la classe intérieure, sauf dans les méthodes de la classe extérieure, et je fais rarement de telles classes mutables - mais c'est juste moi. p>
Eh bien, j'essaie d'accomplir ce que je peux faire en C #: //[MapManagement.cs] Espace de noms MapManagement {Public Static Class MapManager {...} Classe publique SpécialMapfile {...}} Je veux 2 classes (non statique ) dans un fichier 1, en quelque sorte en Java, ce n'est pas autorisé .. Erreur: "Le nom de type public doit être défini dans son propre fichier" Alors c'était ma solution à cela, je veux 1 paquet et je veux avoir une classe associée groupé dans leur propre fichier -
En réponse aux commentaires sur l'emballage de plusieurs classes dans un fichier: Contrairement à .NET, la plupart des implémentations de Java appliquent une corrélation stricte entre le nom du type de classe public et le nom du fichier de classe est déclaré. Ce n'est pas une exigence difficile, mais non utilisée un système dans lequel la corrélation n'est pas appliquée. Les JLS - 7.6 Type de niveau supérieur Déclarations a> dit ceci: p>
Lorsque les packages sont stockés dans un système de fichiers (§7.2.1), le système hôte peut
choisir d'appliquer la restriction que
C'est une erreur de compatation si un type
est introuvable dans un fichier sous un nom
composé du nom de type plus un
extension (telle que .java ou .jav) si
L'un des éléments suivants est vrai: p>
Voir cette question: DÉCLARATIONS DE LA CLASSE Multiple dans un fichier p>
Si vous souhaitez créer un espace de noms pour joindre vos classes associées, vous devez utiliser des classes internes statiques. La déclaration statique ne signifie pas une instache - elles peuvent toujours être instanciées - le Bien que personnellement, je m'abstiendrais de le faire - en Java, les packages sont utilisés pour appliquer un espace de noms. Utiliser des classes intérieures pour cela devient rapidement encombrant. (Je l'ai essayé!) P>
statique code> signifie qu'ils peuvent être instanciés sans avoir besoin d'une référence à la classe enfermante. Au fur et à mesure que la classe jointe est juste pour le regroupement et non des données, vous en faites une sécurité en toute sécurité. Pour plus claire que la classe d'enceinte soit juste pour le regroupement, vous devez le déclarer sous la forme d'une interface code> code>, de sorte qu'elle ne puisse pas être instanciée et n'a pas de détails de mise en œuvre. P>
Ah merci pour l'info :). (et merci à tous pour votre aide)
Dupliqué possible de Java - aucune instance de type FOO est accessible < / a>