Les situations dans lesquelles les classes internes anonymes ne conviennent pas incluent : besoin d'accéder à des membres privés, besoin de plusieurs instances, besoin d'hériter, besoin d'accéder à des types génériques
Scénarios dans lesquels les classes internes anonymes Java ne conviennent pas à l'utilisation
Les classes internes anonymes sont un moyen pratique de créer des classes internes qui peuvent être utilisées pour créer rapidement une classe qui implémente une interface ou étend une classe si nécessaire. Cependant, il existe certaines situations dans lesquelles il n'est pas approprié d'utiliser des classes internes anonymes :
1 Nécessité d'accéder aux membres privés de la classe externe
Les classes internes anonymes ne peuvent pas accéder aux membres privés de la classe externe, ce qui peut limiter. leur utilisation dans certaines situations est utile. Par exemple, si vous devez accéder à des champs privés ou à des méthodes d'une classe externe à partir d'une classe interne anonyme, vous devez promouvoir les droits d'accès de ces membres en protégés ou publics, ce qui peut violer le principe d'encapsulation.
2. Plusieurs instances requises
Les classes internes anonymes sont généralement des singletons, ce qui signifie qu'une seule instance de la classe peut être créée. Cela constituerait une limitation si plusieurs instances de la classe interne anonyme doivent être créées.
3. Héritage requis
Les classes internes anonymes ne peuvent pas hériter d'autres classes, ce qui peut limiter leur flexibilité dans certaines situations. Par exemple, si vous devez créer une classe interne anonyme qui hérite d’une autre classe, cela ne sera pas possible.
4. Besoin d'accéder aux types génériques
Les classes internes anonymes ne peuvent pas accéder aux paramètres de type génériques des classes externes. Si vous devez accéder aux paramètres de type générique de la classe externe à partir d'une classe interne anonyme, vous devez spécifier explicitement ces paramètres en tant que paramètres de type.
Cas pratique :
Considérons l'exemple suivant :
// 外部类 public class OuterClass { private int privateField; public void doSomething() { // 创建匿名内部类 Runnable runnable = new Runnable() { @Override public void run() { // 无法访问 privateField System.out.println(privateField); } }; } }
Dans ce cas, la classe interne anonyme ne peut pas accéder aux champs privés de la classe externe privateField
, donc la classe interne anonyme n'est pas adaptée à l'utilisation.
Alternatives suggérées :
Dans le cas ci-dessus, vous pouvez utiliser des classes internes nommées ou des classes internes statiques comme alternative aux classes internes anonymes. Cela permettra l'accès aux membres privés de la classe externe et la possibilité de créer plusieurs instances.
// 外部类 public class OuterClass { private int privateField; public void doSomething() { // 创建带有名称的内部类 class InnerClass implements Runnable { @Override public void run() { // 可以访问 privateField System.out.println(privateField); } } // 创建 InnerClass 的实例 InnerClass innerClass = new InnerClass(); innerClass.run(); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!