Нет. Но если вы хотите иметь такой список, вы можете заполнить его самостоятельно:
private static final Set<WeakReference<Building>> instances =
Setes.newSetFromMap(new IdentityHashMap<WeakReference<Building>>());
public Building() {
synchronized(Building.class) {
instances.add(new WeakReference(this));
}
}
// etc the same in all constructors
Sets.newSetFromMap(..)
из библиотек guava. Если вы не хотите их использовать, вы можете просто использовать Map
и put(this, Boolean.TRUE)
WeakReference
означает, что объекты будут собираться мусором, если они не используются где-либо еще. IdentifyHashMap
означает, что не имеет значения, переопределите ли вы hashCode()
и equals()
, ваша карта будет заполнена различными экземплярами. (спасибо Люку Хаттеману за эти улучшения)
Спорно ли это должно быть достигнуто таким образом. Я бы сказал, что тот, кто создает экземпляры, может хранить ссылки на них, а не на сам класс.