所以我认为我一直在尝试做不可能的事情,我只是想确保我是对的。
ArrayList的add()方法不是静态的,因此必须实例化ArrayList的任何子类才能添加任何东西,对吗?
因此,如果我想要一个扩展ArrayList的类来提供一些管理一组对象的新函数,那么我必须实际创建一个子类的实例吗?
如果是这种情况,是否可以通过静态初始化程序对其进行实例化,如下所示:
static ArrayList<object> manager = new ArrayList<object>();
即使变量是静态的,这会被视为在类加载时创建的实例吗?我怎么知道它何时被创建,所以我可以确保引用管理器的代码不会出现问题?我必须在代码的开头只实例化一次,因为随着时间的推移,我想多次使用相同的ArrayList(添加,删除等)。
感谢您的任何澄清。
答案 0 :(得分:1)
打印引用变量在内存中的位置,这将告诉您JVM已创建它。
这样做:
system.out.println(manager);
这将在内存中打印对象位置,这将告诉您它已创建。 希望这可以帮助。 P.S在乍一看,记忆中物体位置的显示可能看起来像很多垃圾,但它确实有意义。
答案 1 :(得分:1)
如果您想确保它不为空,您可以这样做:
private static final ArrayList<Object> manager;
static {
//Static blocks are automatically called
manager = new ArrayList<Object>();
//You can use any of the needed methods here as well, or even add things to manager.
//Note that this is basically the same as assigning it beforehand, and certainly not required.
//But it does allow, say, loading it from a file or however you need it.
}
你可以或者创建一个检查实例是否为null
的方法,如果是,则创建一个实例:
private static void instIfNull() {
if (manager == null) {
manager = new ArrayList<object>();
}
}
然后你会在所有本地函数中调用它。