Java Generics返回int []而不是Integer []

时间:2016-03-28 12:59:21

标签: java generics

我有这样的事情:

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[]

    }
}

我知道Integerint不同,因为int是原始的,我也知道我不能使用int作为通用同样的原因。

仍然有一种简单的方法来更改泛型,以便我可以返回int[]吗?

3 个答案:

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