【发布时间】:2018-11-19 15:10:16
【问题描述】:
我有一个Collection 的元素。当Collection 被填充时,很容易得到第一个元素并确定它是什么类型。但是当Collection 为空时,我不知道该怎么办。
下面的例子:
public static void main(final String args[])
{
typer(Collections.singletonList(Integer.valueOf(0)));
typer(Collections.singletonList(Double.valueOf(0)));
typer(Collections.<Integer> emptyList());
}
private static void typer(final List<? extends Number> list)
{
if (list.isEmpty())
{
System.out.println(list.getClass());
}
else
{
System.out.println(list.get(0).getClass());
}
}
产生的输出是:
class java.lang.Integer
class java.lang.Double
class java.util.Collections$EmptyList
【问题讨论】:
-
“当集合被填充时,很容易得到第一个元素并计算出它是什么类型”不,不是。我可以创建
class X extends Number和class Y extends X并将Y的实例放入List<X>。通过查看第一个元素,您可以推断List的类型为List<Y>,即使它不是。 -
另外,你不能。如果您的设计依赖于您了解元素的类型,那么我会说 99% 确定您的设计是错误的。
-
@Michael 我很感激我不能确保它是唯一的 X,而不仅仅是扩展 X 的东西,但这种区别对我有用。
标签: java generics collections