我有一个LinkedHashMap
页面,我有一个PageIDs
数组。我想编写一个方法,返回在PageIDs
问题是该页面是一个通用类。
当我写Page<byte[]>[] pagesToReturn = new Page<byte[]>[pageIds.length];
时,我当然得到错误“无法创建一个通用的页面数组”。
当我尝试创建一个数组然后将其强制转换时,Page<byte[]>[] pagesToReturn = (Page<byte[]>[]) new Page[pageIds.length];
我收到一个警告“类型安全:从Page []到Page []”未经检查的强制转换。“
我知道这是一个微妙的问题,但我必须遵守方法public Page<byte[]>[] getPages(Long[] pageIds)
的签名,它必须返回一个通用类型为字节数组的页面数组。
此问题是否有解决方法,不包括警告抑制?
答案 0 :(得分:2)
此问题是否有解决方法,不包括警告抑制?
没有。但是,如果程序中的其他地方都注意了类型安全性,因此Page
的数组保证包含Page<byte[]>
的实例,那么这个转换是安全的。
处理这种情况的最佳方法是取消警告,并添加一条注释,说明演员阵容是安全的,因为您知道元素保证是正确的类型。
答案 1 :(得分:1)
按如下方式抑制警告:
@SuppressWarning("unchecked")
Page<byte[]>[] pagesToReturn = (Page<byte[]>[]) new Page[pageIds.length];
您还可以执行以下操作:
public class MyPage extends Page<byte[]>{
...
}
MyPage[] pagesToReturn = new MyPage[pageIds.length];