我想限制不。一个类的直接实例(在Java中)对n说,即在任何时候,不超过n个类的直接对象存在于存储器中。但是没有这样的限制。间接对象,例如此类的任何子类。有没有办法在Java中实现这个目标?
答案 0 :(得分:3)
使用工厂设计模式,如果您的实例超出限制,则抛出异常。
http://www.oodesign.com/factory-pattern.html
下面的是一个粗略的示例实现。
public class AnyClass {
private static final int limit_ = 8;
private static int count = 0;
private AnyClass() {}
public static synchronized AnyClass getInstance() {
if (count < limit_) {
AnyClass anyClass = new AnyClass();
count++;
return anyClass;
}
return null;
}
}
答案 1 :(得分:0)
你可以这样做:
static final AtomicInteger count = new AtomicInteger();
// in your parent constructor.
if (getClass() == Parent.class && count.incrementAndGet() >= LIMIT)
throw new IllegalStateException();
答案 2 :(得分:0)
Java本身并没有提供这种可能性。
我认为您可以使用池化工厂或直接在类构造函数中管理自己的情况。 在构造函数中,如果INSTANCES&gt;,则检查静态计数器INSTANCES(在您的类中定义为私有数字)。 MAX_LIMIT然后你抛出一个异常。
答案 3 :(得分:0)
我认为这样做是个坏主意(不知道你的用例),但无论如何......
您可以通过在该类的构造函数中放入一些代码来计算所有实例。如果需要忽略子类的实例,请检查getClass()
返回的值。
要知道实例何时发布,您可以使用weak references和WeakHashMap来估算仍在使用的实例数。实际使用的实例数可能更低,因为垃圾收集会在不可预测的时间删除实例。对于确切的数字,当您知道不再使用实例时,您需要显式调用某个方法。