Réflexion Java: obtenir des instances d'une classe donnée trouvé en entrant son nom?
Est-il possible d'obtenir toutes les instances d'une classe en tapant ce nom de la classe comme une chaîne de caractères?
Quelque chose comme cela?
var instances = Reflection.findClass("com.someone.MyClass").getInstances();
Tout commentaire est apprécié. Merci.
Question similaire: "Utilisation de Java Réflexion, est-il possible d'obtenir le nom d'une variable locale?" stackoverflow.com/questions/744226/...
si vous voulez savoir combien d'instances d'une classe existante au moment de l'exécution ,la tenue de la des références dans la variable membre donnera u accès.
si vous voulez savoir combien d'instances d'une classe existante au moment de l'exécution ,la tenue de la des références dans la variable membre donnera u accès.
OriginalL'auteur Tom | 2011-02-21
Vous devez vous connecter pour publier un commentaire.
Non, il n'y a rien de tel que disponible. Si vous intervenez dans les API de débogage, vous pouvez être en mesure de le faire, mais pas lors de l'exécution de "normalement".
OriginalL'auteur Jon Skeet
Je n'en connais pas un moyen de le faire au moment de l'exécution, mais, si vous êtes heureux de le faire "hors-ligne", vous pouvez effectuer les opérations suivantes:
select * from com.someone.MyClass
. L'exécution de cette requête retournera les instances en mémoire au moment de la heap dump a été prise.OriginalL'auteur Rich
C'est le genre de chose que les profileurs sont bons pour. Avec YourKit vous pouvez rechercher les instances basée sur un caractère astérisque classe et d'inspecter/naviguer dans les de la plus grande à la plus petite ou certains autres critères de tri.
OriginalL'auteur Peter Lawrey
Cette réponse fournit quelques options à l'aide de différents instruments Api. Mais, en général, le travail sur une application en cours d'exécution dans une autre JVM, et ils entraînent l'arrêt de la JVM et le chalutage par le biais de tous les objets dans le tas pour trouver des exemples pertinents.
Une JVM ne pas garder en interne les collections de toutes les instances de chaque classe. Mais vous pouvez faire ce genre de chose vous-même ... si vous mettez en œuvre le comportement de chaque catégorie ou les catégories qui vous intéressent. Vous avez juste besoin d'être prudent afin d'éviter de créer une fuite de mémoire en gardant des références à des instances qui seraient autrement de collection d'ordures.
OriginalL'auteur Stephen C
Le problème ici n'est pas de trouver la classe de l'objet (ce qui peut être fait par
Class.forName()
), mais qui, normalement, une classe n'ont aucune connaissance de ses instances.Si vous avez le contrôle sur votre classe, vous pouvez créer un registre de toutes les instances, et ajouter chaque instance de cette dans le constructeur. Mais vous devez être prudent de ne pas désactiver la collecte des ordures par la présente, de sorte que l'utilisation de références faibles au lieu de la normale.
OriginalL'auteur Paŭlo Ebermann