Il n'y a pas question de performance particulière (au-delà du coût de chargement d'une classe par le classloader - négligeable)
ci-dessus ne créer une classe anonyme et en tant que tel, il contient une this
implicite référence à l'instance entourant . Cela peut causer une certaine confusion pour les cadres de sérialisation. par exemple. vous sérialiserez la classe anonyme que vous avez créée, et vous découvrirez soudain que vous essayez également de sérialiser l'instance contenant.
Je voudrais souligner que les cours anonymes peuvent être beaucoup utilisés sous les couvertures dans différents cadres et en effet des langages (Scala - je vous regarde). Je n'ai jamais entendu quelqu'un suggérer que Scala a des problèmes de performance en raison de la charge de classe. Première mise en service peut être très légèrement plus lent, mais gardez à l'esprit démarrage JVM, JIT warm-up, tout accès réseau etc.
Vous pourriez arguer que votre empreinte demande est plus grande, en raison de plusieurs classes. Je suspecte (encore) l'effet est négligeable (sauf si vous construisez une application entière de classes anonymes!)
Non, seul le côté positif est moins de code .. mais pas lisible par tous les autres qui ne sont pas conscients de l'initialisation double accolade. – Phani
Bien que plus lisibles par des personnes capables de programmer en Java, dans un contexte non-statique, vous allez chercher une référence à 'ceci'. Vous pouvez également récupérer des références fixes aux champs finaux que vous utilisez lors de l'appel des mutateurs. Ce ne sera pas évident pour la plupart des programmeurs Java, et pourrait bien conduire à des problèmes de mémoire obscurs. // Quoi qu'il en soit, vous devriez écrire quelque chose comme 'private static final Set VALID_CODES = Collections.unmodifiableSet (nouveau HashSet (Tableaux.asList ("XZ13s", "AB21/X", "YYLEX", "AR2D"))); ', évidemment. –