我有这样的想法:
public interface A<I>{
public I[] returnAll();
}
public class B implements A<Integer>{
public Integer[] returnAll(){
return new int[] //return Type has to be Integer[]
}
}
我知道 Integer
以及 int
是不同的,因为 int
是原始的,我也知道我不能用 int
因为同样的原因。
不过,有没有一种简单的方法来更改泛型以便返回 int[]
?
3条答案
按热度按时间xfb7svmp1#
不,你不能,但是你可以替换你的接口
通过
如果你只处理数组。否则,你就走运了。如果你能用
List
s而不是数组,那么guava ints#aslist会有所帮助。im9ewurl2#
泛型只支持 Package 类。不能将其用于基本类型。
It allows primitive types but it uses autoboxing for the same.
java中的泛型完全是编译时构造—编译器将所有泛型使用转换为正确类型的类型转换。为什么泛型只支持 Package 类作为泛型使用的任何东西都需要可转换为对象,并且基元类型不能转换为对象。这就是泛型不支持它的原因。
编辑:
在Java10中,有一个泛型支持原语的建议,但现在不可用(彼得拉弗里在评论中提供的信息)
mitkmikd3#
一
int[]
不是一个Integer[]
. 唯一的办法就是回来I
使用A<int[]>
对于B
班级。你不能使用
A<int>
因为现在不能将基元类型用作泛型类型(希望如此)。