Java Inner Classes Design Benifits

En Java, vous pouvez avoir des classes internes. Je suis curieux du sharepoint vue de la conception si cela présente des avantages.

Ma pensée initiale est qu’avoir un fichier séparé avec la classe est plus propre pour séparer les choses en modules réutilisables. Ce faisant, si d’autres classes souhaitent utiliser cette autre classe, elles peuvent également créer leurs propres instances. Pour moi, il semble que le fait d’éviter les classes internes peut constituer un meilleur concept d’extensibilité et de réutilisation du code. Lorsque vous travaillez sur de nouveaux projets, il est normalement difficile de dire si la classe sera réutilisée ou non … classes séparées est la voie à suivre.

Je pose cette question parce que j’ai repris un projet qui en contient beaucoup… ce qui me fait penser que le développeur précédent peut être simplement paresseux ou peu familier avec l’IDE. Mais je veux m’assurer de ne manquer aucun des avantages de ces classes inférieures. S’il y a des avantages, quelqu’un peut-il me le faire savoir et je pourrai ensuite confirmer si le développeur précédent en a profité.

Les classes internes sont bonnes lorsqu’elles ne sont pas utilisées en dehors de la classe conteneur – c’est un moyen de réduire le fardeau de la classe. En règle générale, c’est la seule fois où je les utilise.

Les classes internes non statiques ont également access aux champs privés de l’instance contenant.

Les classes internes sont utiles pour:

  1. Masquer les détails de la mise en œuvre.

  2. Rendre la vue du projet plus concise et donc compréhensible.

  3. Ajoutez un regroupement logique du code associé.

Un bon usage des classes internes qui me vient à l’esprit est java.util.ArrayList, qui masque ses implémentations d’iterators dans private inner classes . Vous ne pouvez pas les créer sauf en listIterator() iterator() ou listIterator() sur l’object liste.

De cette façon, les implémentations Iterator et ListIterator pour ArrayList sont regroupées avec leur classe et méthodes associées pour une lisibilité améliorée (les implémentations sont assez courtes), mais cachées des autres.

Ils ne peuvent pas être déclarés static car ils ont besoin d’accéder à leur object d’ instance englobant.

 public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable { ... public Iterator iterator() { return new Itr(); } private class Itr implements Iterator { ... } public ListIterator listIterator() { return new ListItr(0); } private class ListItr extends Itr implements ListIterator { ... } } 

Classe interne non statique:
1) La classe interne sera utilisée pour effectuer une tâche sur la classe externe et renvoie le résultat
. Cela garantira donc que l’object de classe externe est créé pour y accéder.
2) La classe interne est uniquement spécifique à la classe externe et ne peut pas être utilisée à l’extérieur. Donc pas besoin de penser à la réutilisation du code.

par exemple_1) Le meilleur exemple pour la classe interne est la mise en œuvre par iterator du cadre de la collection. Set (AbstractCollection.java) et List (AbstractList.java) utiliseront différentes implémentations de classes internes d’iterators.
-> Nous pouvons réutiliser le code de classe interne. Par exemple, l’implémentation de private class Itr innerclass à java.util.AbstractList est utilisée à la fois par Arraylist et par Vector.

Classe intérieure statique:
1) La classe interne statique ne dépend pas d’un object de classe externe; mais il est spécifique au niveau de classe externe. Il ne sera pas exposé à la version autonome puisqu’il est spécifique à la classe externe uniquement. Donc, pas de réutilisation de code.
2) Il a un groupe de méthodes qui est commun à tous les objects (niveau de classe) 3)

par exemple_1) la resortingval d’object Sigleton à l’aide d’une classe interne statique.
par exemple_2) Modèle de générateur
par exemple_3) Implémentation de comparateur pour une classe.

Les classes internes sont une chose très importante, cela vous aide à répondre aux besoins d’encapsulation, votre classe de base peut également hériter de nombreuses classes (implémentation de gestionnaires abstraits par exemple) Chaque programmeur peut apprendre à utiliser la classe interne en Java, c’est très utile.