今天在写代码的时候,在将object 转换为List<MyType>的时候编译器给了我一个警告
未经检验的类型转换
Unchecked cast: 'java.lang.Object' to 'java.util.List<edu.dlu.bysj.base.model.vo.FunctionTimeVo>'
平时使用 instanceof 都是 两个对象之间的类型比较,现在是要对象和集合进行类型比较不太懂
直接这样写 会出现编译异常
if (range instanceof List<FunctionTimeVo>) {
result = (List<FunctionTimeVo>) range;
}
Illegal generic type for instanceof
这样写又没有检查到集合中的对象的类型,相当于没写
if (range instanceof List<?>) {
result = (List<FunctionTimeVo>) range;
}
感觉这是一个比较基础的问题,平时没怎么用就不知道该怎么做,希望大佬们给解答一下
因为类型擦除了,所以没法判断是不是
List<MyType>
。可以弄一个可以记录类型信息的包装类型:
如果没有包装类型的话,一般是尝试取第一个元素,看它的类型,大概这样:
但如果你用反射之类的手段往里强插了一个别的类型,一样有类型安全问题。归根结底是类型擦除把类型信息弄没了。
P.S. 楼上那种做法跟你判断
List<?>
没有区别,只是去掉了编译器警告。