8
votes

Comment créer une nouvelle instance de classe d'une classe dans une classe (statique)?

Je suis nouveau à Java (avoir une expérience avec C #),

C'est ce que je veux faire: xxx

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).

Ceci est possible dans C # avec des classes statiques, comment devrait-elle être faite ici?


4 Réponses :


4
votes

5 commentaires

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.



19
votes

Comment vous avez défini myRelatedClass code>, vous devez avoir une instance de em> myClass code> pour pouvoir accéder / instancier cette classe.

typiquement en Java, vous utilisez ce motif lors d'une instance de myRelatedClass code> AVERTISSEMENT DE COMPILTEON). P>

Quelque chose comme ça devrait compiler: P>

public void doStuff() {
   MyClass mc = new MyClass();
   MyRelatedClass data = mc.new MyRelatedClass(); 
}


3 commentaires

Création d'une classe intérieure (non statique) sur quoi que ce soit autre qu'un implicite, ce 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 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.



0
votes

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:

  1. Faites la classe imbriquée statique comme Servin suggère, ou
  2. Créez-le à l'aide d'une instance de la classe extérieure car le message d'erreur suggère.

    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.


1 commentaires

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 -



2
votes

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 dit ceci:

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:


1 commentaires

Ah merci pour l'info :). (et merci à tous pour votre aide)