java - 如何在 java 中扩展列表以存储额外的元数据并强制它只接受一种类型的对象?

标签 java list collections extending

除了包含的项目外,我还必须将列表的名称和 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/

相关文章:

java - 如何创建在两种颜色之间交替的虚线?

java - Spring Boot 测试类可以重用应用程序上下文以更快地运行测试吗?

java - 绑定(bind) map 时调用自定义构造函数

c# - 关于集合返回类型的问题

Java很长的字符串比较似乎不起作用

java - 我需要提及默认的 Maven 存储库 url 吗?

Haskell 中的列表操作性能

C 通过引用删除链表?

Python的列表理解和其他更好的实践

java - 我应该使用什么结构来存储键和可能值的列表?