我有这样的事情:
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[]
吗?
答案 0 :(得分:6)
只有Wrapper类才支持泛型。您不能将它用于原始类型。
It allows primitive types but it uses autoboxing for the same.
Java中的泛型是一个完全编译时的构造 - 编译器将所有泛型用法转换为正确类型的强制转换。
为什么Generics仅支持Wrapper类? :您用作泛型的任何内容都需要转换为Object.and基本类型无法转换为Object。这就是泛型不支持的原因。
编辑:
在Java 10中,有一个泛型支持原语的提议,但现在不可用。 (PeterLawrey在评论中提供的信息)
答案 1 :(得分:3)
不,你不能,但你可以更换你的界面
public interface A<I>{
public I[] returnAll();
}
通过
public interface A<AI>{
public AI returnAll();
}
如果您只处理数组。否则,你运气不好。如果您可以使用List
而不是数组,那么Guava Ints#asList可以提供帮助。
答案 2 :(得分:1)
int[]
不是Integer[]
。唯一的方法是返回I
并将A<int[]>
用于B
类。
public interface A<I>{
public I returnAll();
}
public class B implements A<int[]>{
public int[] returnAll(){
return new int[]{};
}
}
您无法使用A<int>
,因为您无法将基本类型用作通用类型,目前(让我们希望)。< / p>