2015-09-03 1 views
2

Existe-t-il des fonctionnalités spéciales dans les classes anonymes par rapport aux classes normales, car je ne vois rien de spécial dans ces classes?Pourquoi les classes anonymes existent-elles en Java?

+0

L'encapsulation et l'accès seraient ma conjecture. Rien d'autre ne les distingue. – duffymo

+0

Pourquoi nous ne pouvons pas déclarer constructeur dans les classes anonymes? – SanthoshPonraj

+2

@Santhosh une méthode Constructer utilise son nom de classe. Pour les Classes anonymes n'ont pas de noms, ils ne peuvent pas dévaloriser les méthodes Constructeur. – hata

Répondre

7

est-il des caractéristiques spéciales dans les classes anonymes par rapport aux classes normales

En effet il y a une particularité: ils ont la sémantique d'une fermeture qui signifie que vous pouvez accéder à des variables locales dans le périmètre sur leur site de déclaration. La classe anonyme est un cas particulier d'une classe locale qui a la même fonctionnalité; Cependant, une classe locale nommée n'est presque jamais utilisée.

Par rapport à la « normale » des classes, les classes anonymes sont également internes des classes, ce qui signifie qu'ils capturent l'instance de la classe englobante et (si elles sont déclarées dans un contexte non statique). Pour résumer, les classes anonymes sont une union de toutes les fonctions spéciales que peut avoir une classe Java.

+0

'si déclaré dans un contexte non statique', cela ne peut pas être assez souligné. 99% des classes internes anon que je rencontre inutilement capturer une instance d'une classe englobante. La plupart du temps c'est assez inoffensif mais de temps en temps ... – biziclop

+3

C'est un mauvais aspect de la spécification ... ils le capturent inconditionnellement, même s'il n'est jamais utilisé dans le code d'implémentation. La spécification aurait pu être plus intelligente à ce sujet (comme la spécification lambda _is_). –

0

Peut-être programmeur sera très fatigué, quand doit inventer la 100ème mutation de XxxxxListener. Les petits morceaux de code ne valent pas la peine. Ceci est mon opinion personnelle.

La classe anonyme IMHO est meilleure que les noms générés automatiquement combo1, combo2, combo3 dans IDE f.e. Delphes. Programmeur fatigué accepter de tels noms pour des objets sans importance (local etc) mais très important aussi, c'est très mauvais habbit