除了包含的项目外,我还必须将列表的名称和 ID 存储在其内部。因此我扩展了一个 ArrayList
如下:
class MyList<E> extends ArrayList<E>{
private int id;
private String name;
MyList(int id, String name){
this.id = id;
this.name = name;
}
id getId(){ return id; }
String getName(){ return name; }
}
现在我意识到,这个扩展只能容纳一种特定类型的对象。那么如何删除列表的通用字符呢?
class MyList<MyObject> extends ArrayList<E>
class MyList<MyObject> extends ArrayList<MyObject>
...等等都失败了。我想实例化我的列表
MyList mylist = new MyList();
...它应该只自动接受 MyObject
...
(除了元数据之外,创建一个包含 ArrayList
的包装器会更好吗?但是因为它仍然是一个列表,为什么要删除所有典型的列表功能...)
最佳答案
你需要
class MyList extends ArrayList<MyObject>
当你像这样为你的类声明声明一个类型参数时
class MyList<MyObject> ...
类型 MyObject>
不是您的类型,它是一个类型变量,名称也为 MyObject
。
您想要的是使用您的 MyObject
类型作为 ArrayList
类型参数的类型参数,如上所示。
但是,正如其他人所建议的那样,组合可能是一种更好的方法,即您在问题中建议的包装器。
关于java - 如何在 java 中扩展列表以存储额外的元数据并强制它只接受一种类型的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20820648/