我们可以在java中创建通用接口数组吗?
interface Sample<T>{}
在其他班级
Sample<T> s[] = new Sample[2] ; // for this it shows warning
Sample<T> s[] = new Sample<T>[2];// for this it shows error
答案 0 :(得分:3)
不幸的是,Java不支持创建通用数组。我不知道确切的原因。实际上泛型仅在编译时存在,并且在运行javac时被删除,即从.java移动到.class。但要理解这个限制是不够的。可能他们对此类功能存在一些向后兼容性问题。
以下是您可以使用的解决方法。
使用集合(例如list)而不是数组。
List<Sameple> list = new ArrayList<Sameple>(); // this is OK and typesafe
创建没有泛型的数组,将代码放入使用@SuppressWarnings
注释的特殊工厂方法中:
public class Test {
interface Sample<T>{}
@SuppressWarnings("unchecked")
public static <T> Sample<T>[] sampleArray() {
return new Sample[2];
}
}
现在您可以使用此工厂方法,而无需任何其他警告。
一般提示。
禁止警告是不好的做法。警告是潜在的问题。因此,如果我必须禁止警告,我至少会尝试减少警告被抑制的范围。
遗憾的是,旧版Java API不支持泛型。我们经常在使用此类API时收到警告。我总是试图将这些用法本地化为特殊类或至少像sampelArray()
这样的方法。这些方法由@SuppressWarning
标记,并且通常包含解释为何在此处抑制警告的注释。