【发布时间】:2012-08-07 03:50:00
【问题描述】:
我知道如果您想要一个列表(例如),您可以像这样创建它:
List<String>
如果你想创建一个通用类型的列表,你可以这样做:
MyList<T>
那么 所做的唯一事情就是将对象与容器或列表耦合起来吗?它还有其他用途吗?它实际上是做什么的? 在另一篇文章中阅读如何将静态方法放入泛型类型对类型安全来说是一件坏事,所以这是糟糕的代码吗?
public class LinkList<T> {
private final T t;
private final LinkList<T> next;
public LinkList(T t, LinkList<T> next){
this.t = t;
this.next = next;
}
// Creates list from array of T
public static <T> LinkList<T> getList(T[] t){
if(t == null){
return null;
}
LinkList linkList = null;
for(int i = t.length-1; i >= 0; i--){
linkList = new LinkList(t[i], linkList);
}
return linkList;
}
public T element() {
return t;
}
public LinkList<T> getNext() {
return next;
}
}
【问题讨论】:
-
它指定了一个类型参数。您可以阅读有关泛型的更多信息here, in the relevant Java Tutorial。
-
那么......这是因为泛型类型中的静态方法而导致的错误代码吗?在那里有什么潜在的危险?问题是我可以将多个类型塞入列表中还是会给我一个编译错误?
-
@GenericJam 我认为在泛型类型中使用静态方法没有任何问题。不过,我确实在您的
getList实现中看到了一些问题,因为它仅返回一个LinkList,其元素是数组中的最后一个元素,并且其相邻邻居为空。 -
@AaronKurtzhals 该帖子中的第一个答案很好地解释了泛型,但我也想知道为什么在泛型类型中使用静态方法很危险(?)。您必须通过在静态之后放置“
”来欺骗编译器而不是抱怨,还是强制转换?我不完全理解它为什么起作用。