48 votes

Classe imbriquée/interne dans un fichier externe

J'ai une classe MyClass et une classe interne MyNestedClass comme ceci :

 public class MyClass {
  ...
  public class MyNestedClass {
    ...
  }
}

Les deux cours sont très longs. Pour cette raison, j'aimerais les séparer dans deux fichiers différents, sans casser la hiérarchie. C'est parce que la classe imbriquée ne doit pas être visible pour le programmeur qui utilise MyClass.

Y a-t-il un moyen d'y parvenir?

8voto

retrodrone Points 2979

Non. Les codes source Java ne peuvent pas être répartis sur plusieurs fichiers. Vous auriez besoin d'une construction similaire à une classe partielle comme en C#, que Java n'a pas.

7voto

osdamv Points 1315

je pense que vous avez un objet dieu ou quelque chose comme ça, pensez à refactoriser votre code

http://en.wikipedia.org/wiki/God_object

5voto

Op De Cirkel Points 8632

Les objets des classes internes conservent des références implicites aux objets de la classe parent. Si la classe imbriquée n'est pas static (elle est interne), vous ne pouvez pas. Mais si la classe imbriquée n'a pas besoin d'accéder directement aux instances de classe du parent et n'a pas besoin d'accéder aux champs privés, alors cela devrait être ok pour refactoriser, déplacer la classe interne et ne pas la déclarer publique (hors de ce package ne peut pas être accessible).

4voto

Peter Rader Points 3995

Oui, en utilisant un cavalier en cascade. Un cavalier en cascade est une classe interne abstraite et non statique qui est définie n'importe où ailleurs.

MaClasse.java

 public class MyClass {
  public abstract class CascadeJumper {}
}

MaClasseImbriquée

 private class MyNestedClass extends MyClass.CascadeJumper {
  MyNestedClass(MyClass dollarOne) {
    dollarOne.super(); // yes, is possible!
  }
}

Salutations

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X