我有2个类,B
和C
,他们需要跟踪他们的实例,所以他们每个人都有一个ArrayList
他们各自类型的实例添加到构造函数。如何确定当前类的类型?
由于这看起来很常见,我试图找到某种标准的Java接口或类来表达这种行为,如接口InstanceManager
。我没有找到任何
我最终试图为它写一个抽象类,并且因为我不知道如何指定子类的特定类型而卡住了。 例如:
public abstract class C { public static ArrayList<C> list; }
public class A extends C { }
public class B extends C { }
在这种情况下,B.list
或A.list
将C
对象的名单,但我真的希望他们能够B
和A
对象列表,分别。
有什么办法可以让这种情况轻易发生?
我沿着
public abstract class C { public static ArrayList<thisclass> list; }
行思考的东西,但会显然是不行的。
我意识到我可以使用泛型来处理这个问题,但它感觉多余,我不禁希望有一种方法可以在这种情况下以某种方式推断子类的类型。
此外,是否有任何标准的Java接口来处理实例管理或唯一实例ID生成?
编辑:
我已经明白,静态变量不是继承的,子类的静态变量实际上是指同一件事。因此,有什么办法可以定义实例管理行为而不诉诸冗余,必须在所有子类中写入相同的东西?在运行时
abstract class C<T> {
public List<T> list;
}
class A extends C<A> {
}
class B extends C<B> {
}
如果这是一个“静态”持有者,那你的运气不好。 'A'和'B'都将共享相同的列表。 – 2014-11-04 16:58:27
为什么不使用Map>,根据我的运行时类型 –
yurib
2014-11-04 16:59:51
@yurib将每个实例插入到适当的列表中,但这意味着要有所有子类的集中式集合,并且我宁愿拥有每种类型都有不同的列表。 – RedCat23 2014-11-04 17:05:39