【发布时间】:2016-11-20 20:56:56
【问题描述】:
我正在尝试一些关于泛型上限/下限的示例程序。泛型上限给出编译错误...但是下限很好。 我只是想把一个 T 类型的列表放入一个集合中,然后尝试上限和下限场景..
请帮助确定 testUpperBound(T t) 方法的问题,以及为什么 testLowerBound(T t) 方法可以编译而 testUpperBound(T t) 方法不能编译。我检查了其他类似的线程..但我仍然没有弄清楚。
如果需要更多详细信息,请告诉我。
public class TestGenerics<T>
{
public static void main(String...args)
{
List<String> list = new ArrayList<>();
list.add("New ArrayList");
new TestGenerics<List<String>>().testUpperBound(list);
new TestGenerics<List<String>>().testLowerBound(list);
}
public void testLowerBound(T t)
{
Set<? super ArrayList<T>> lowerBoundSet = new HashSet<>();
lowerBoundSet = new HashSet<List<T>>();
ArrayList<T> list = new ArrayList<>();
list.add(t);
lowerBoundSet.add(list); // compiles..
out.println(lowerBoundSet);
}
public void testUpperBound(T t)
{
Set<? extends List<T>> upperBoundSet = new HashSet<>();
upperBoundSet = new HashSet<List<T>>();
ArrayList<T> list = new ArrayList<>();
list.add(t);
upperBoundSet.add(list); // Doesn't compile..
out.println(upperBoundSet);
}
}
【问题讨论】: