48 votes

ClassValue en Java 7

Lors de la navigation sur Java 7 documentation de l'API, je suis tombé sur la nouvelle classe java.lang.ClassValue avec le suivant, plutôt documentation minimale:

Paresseusement associer une valeur calculée avec (éventuellement) de chaque type. Par exemple, si un langage dynamique a besoin de construire un message expédition table pour chaque classe rencontrés à un message envoyer site d'appel, il peut utiliser un ClassValue pour mettre en cache les informations nécessaires pour effectuer le message envoyer rapidement, pour chaque classe rencontrés.

Quelqu'un peut-il donner une meilleure explication de ce problème de cette classe résout et peut-être un exemple de code ou de projet open source qui utilise déjà cette classe?

Mise à jour: je suis toujours intéressé à un code source ou des exemples d'utilisation de cette nouvelle classe.

J'ai aussi trouvé ce mail sur le mlvm-dev liste de diffusion à propos de certains de la mise en œuvre des améliorations. Il a apparemment changé d'utiliser un WeakHashMap à un nouveau domaine privé sur java.lang.Class pour le rendre plus évolutif.

19voto

Scott Carey Points 443

La meilleure explication de l'objectif de cette classe est qu'il résout le Bug de Java 6389107

Il existe de nombreux cas d'utilisation où l'on veut, pour l'essentiel, un Map<Class<?>, T> , pour une raison quelconque, mais ce qui provoque toutes sortes d'ennuis depuis Class objets ne seront pas GC-mesure jusqu'à ce que la Carte est. WeakHashMap<Class<?>, T> ne résout pas le problème, car très souvent, T fait référence à la classe.

Le bug ci-dessus va dans une beaucoup plus explication détaillée et contient des exemples de projets/code qui sont confrontés à ce problème.

ClassValue est la réponse à ce problème. Un thread-safe, chargeur de classe de chargement/déchargement de la manière la plus sûre pour associer des données avec une Classe.

7voto

Suraj Chandran Points 12859

Son but, il permettrait l'ajout d'informations d'exécution arbitraire de classes de cibles (de référence).

Je pense que son plus ciblées vers la dynamique de la langue des programmeurs. Je ne suis pas sûr de savoir comment il sera utile pour les applications générales de développeurs bien.

D'abord la classe était là, dans le paquet java.dyn. Ce bug montre le déplacement de java.lang.

0voto

Mister Smith Points 8587

Eh bien, c'est une classe abstraite. J'ai trouvé une copie . Jetez un coup d'oeil.

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