检查java List <object>对象类型</object>

时间:2013-09-19 00:45:52

标签: java list object casting

我有一个返回List<?>的泛型函数。如果它正常工作,它将返回List<LightSensor>,但我不能直接将函数的结果转换为List<LightSensor>类型的变量。如何检查列表中的类是否正确的LightSensor? (例如,检查是否List<?> = List<LightSensor>) 另外,一旦检查完毕,正确投射的最佳方法是什么? BTW类LightSensor扩展了Object和Serializable的版本

2 个答案:

答案 0 :(得分:4)

  

如何检查列表中的类是否正确的LightSensor? (例如,检查是否List<?> = List<LightSensor>

AFAIK,唯一的方法是迭代列表并在每个元素上使用instanceof LightSensorgetClass() == LightSensor.class

  

此外,我检查后正确投射的最佳方法是什么?

只需进行类型转换,并禁止“未经检查的转换”警告。

答案 1 :(得分:1)

从方法返回泛型集合的习惯用法如下:

public <T> List<T> getTheList(Class<T> cls){
  // you might need the cls in here to create the list.
  ...
}

显然,使用Class<T>生成列表的方式是特定于应用程序的。大多数情况下,这在某些类层次结构的上下文中是有意义的,在这种情况下T扩展了一些基类或接口:

public <T extends MyBaseClassOrInterface> List<T> getTheList(Class<T> cls){
  ...
}

同样,您创建列表的方式完全取决于应用程序。如果你试图保持整个应用程序的强类型,你可能可以避免做某种黑魔法来找出List<?>的类型参数。如果您最终得到这样的代码(除非显然您正在处理一些遗留代码),这是一种强烈的代码味道。此外,如果清单是空的,你绝对没有希望。