Java-эквивалент Ruby ObjectSpace.each_object - PullRequest
0 голосов
/ 06 декабря 2009

Я ищу способ получить все экземпляры объектов данного типа в Java.

В Ruby вы можете использовать метод ObjectSpace.each_object:

a = 102.7
b = 95.1
ObjectSpace.each_object(Numeric) {|x| p x }

даст

95.1
102.7

Ответы [ 4 ]

1 голос
/ 06 декабря 2009

Эта статья может стоить выглядеть стильно. Я наткнулся на Java Reflection API некоторое время назад, и мне это очень нравится. Хотя каждый Java-программист, с которым я разговаривал, говорит, что это порождение сатаны.

Если это не заставляет вас хотеть учить это, я не знаю, что будет.

1 голос
/ 06 декабря 2009

Нет Java-эквивалента этому.

Единственный способ сделать что-то подобное в Java - это создать каждый класс и поддерживать коллекцию всех экземпляров. ИМО, это было бы плохой идеей, если только нет исключительных обстоятельств, которые оправдывают накладные расходы. Для начала необходимо собрать коллекцию «все экземпляры» таким образом, чтобы избежать удержания мусора.

0 голосов
/ 07 декабря 2009

Интерфейс отладки Java (JDI) имеет новые методы в Java 6.0, которые позволяют инструментам, написанным на самой Java, выполнять ограниченное профилирование памяти. Например, ReferenceType имеет метод экземпляров, который позволяет инструменту получить ссылку на все экземпляры типа.

См. com.sun.jdi.ReferenceType.html # instance

0 голосов
/ 06 декабря 2009

Я не знаю, можете ли вы сделать это. Идея, хотя - есть ли во время выполнения интерфейс к сборщику мусора? GC должен отслеживать все активные в данный момент объекты. Возможно, вы могли бы каким-то образом подключиться к нему, чтобы получить эту информацию, и использовать проверку во время выполнения, чтобы определить, какие объекты имеют искомый класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...