我想限制没有。类的直接实例(在Java中)对n说,即在任何时候,内存中不超过n个类的直接对象。但是没有这样的限制。间接对象,例如此类的任何子类。有没有办法在 Java 中实现这一点?
问问题
2656 次
4 回答
4
使用工厂设计模式,如果您的实例超过您的限制,则抛出异常。
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;
}
}
于 2012-09-23T12:01:52.990 回答
0
你可以做:
static final AtomicInteger count = new AtomicInteger();
// in your parent constructor.
if (getClass() == Parent.class && count.incrementAndGet() >= LIMIT)
throw new IllegalStateException();
于 2012-09-23T12:04:51.193 回答
0
Java 本身并不提供这种可能性。
我认为您可以使用池工厂或直接在类构造函数中管理自己的情况。在构造函数中,您检查静态计数器 INSTANCES(在您的类中定义为私有数字),如果 INSTANCES > MAX_LIMIT 则抛出异常。
于 2012-09-23T12:05:44.597 回答
0
我认为这样做是一个坏主意(不知道你的用例),但无论如何......
您可以通过在该类的构造函数中放置一些代码来计算所有实例。如果需要忽略子类的实例,请检查getClass()
.
要知道实例何时被释放,您可以使用弱引用和WeakHashMap来估计仍在使用的实例数。实际使用的实例数可能会更少,因为垃圾收集会在不可预测的时间删除实例。对于一个确切的数字,当您知道不再使用某个实例时,您需要显式调用某个方法。
于 2012-09-23T12:41:19.727 回答