是否存在java不允许泛型类数组的变通方法

时间:2016-03-26 13:31:13

标签: java arrays generics

我有一个LinkedHashMap页面,我有一个PageIDs数组。我想编写一个方法,返回在PageIDs

中找到id的页面数组

问题是该页面是一个通用类。

当我写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)的签名,它必须返回一个通用类型为字节数组的页面数组。

此问题是否有解决方法,不包括警告抑制?

2 个答案:

答案 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];