【发布时间】:2018-05-02 11:13:38
【问题描述】:
我有一个看起来与此类似的通用类
public class NetworkItems<T> {
private Status status;
private T items;
public NetworkItems() {
this.status = Status.FAILURE;
this.items = null;
}
public NetworkItems(Status status, T listItems) {
this.status = status;
this.items = listItems;
}
public NetworkItems(Status status) {
this.status = status;
this.items = null;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public T getItems() {
return items;
}
public void setItems(T items) {
this.items = items;
}
}
我要做的就是检查参数 T 是否是构造函数中的任何类型的列表。如果 T 是 List 那么我想将它实例化为一个新的 List();
我尝试了以下代码
if (this.items instanceof List) {
this.items = Collections.emptyList();
}
或者这个
this.items = new ArrayList<>();
但我不断收到错误消息,因为我无法提供参数类型。 如果泛型类型 T 是 List,如何确保使用新 List 实例化项目?
【问题讨论】:
-
如果您打算硬编码列表的依赖项,那么为什么不直接使用
NetworkItems<List>? -
因为容器应该能够同时托管项目列表和独立项目。
-
@SriramR 因为容器应该能够同时托管项目列表和独立项目 - 为什么要这样做?为什么不为单个项目或项目集合使用两个不同的容器?
-
我不想重复代码。实现是一样的。除了 T 部分。所以我想如果有办法不用重复代码,为什么不做呢?