Java泛型返回int[]而不是Integer[]

Java泛型返回int[]而不是Integer[],java,generics,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[] } } 我知道Integer和int是不同的,因为int是基本的,我也知道

我有这样的想法:

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

泛型仅支持包装类。不能将其用于基本类型

它允许基本类型,但对相同类型使用自动装箱

Java中的泛型完全是编译时构造——编译器将所有泛型使用转换为正确类型的类型转换

为什么泛型只支持包装类作为泛型使用的任何东西都需要可转换为对象。并且基本类型不能转换为对象。这就是泛型不支持它的原因

编辑:


在Java10中,建议使用泛型来支持原语,但现在还没有。 PeterLawrey在注释

泛型中提供的信息仅支持包装类。不能将其用于基本类型

它允许基本类型,但对相同类型使用自动装箱

Java中的泛型完全是编译时构造——编译器将所有泛型使用转换为正确类型的类型转换

为什么泛型只支持包装类作为泛型使用的任何东西都需要可转换为对象。并且基本类型不能转换为对象。这就是泛型不支持它的原因

编辑:


在Java10中,有一个泛型支持原语的建议,但现在不可用。 PeterLawrey在评论中提供的信息

int[]不是整数[]。唯一的方法是返回I,并对B类使用A

您不能使用,因为您不能将基元类型用作泛型类型,现在希望如此。

int[]不是整数[]。唯一的方法是返回I,并对B类使用A


您不能使用,因为您不能将基元类型用作泛型类型,现在希望如此。

不,您不能,但您可能可以替换接口

public interface A<I>{
    public I[] returnAll();
}


如果您只处理数组。否则,你就不走运了。如果您可以使用列表而不是数组,那么Guava可以提供帮助。

不,您不能,但您可以替换您的界面

public interface A<I>{
    public I[] returnAll();
}


如果您只处理数组。否则,你就不走运了。如果您可以使用列表而不是数组,那么Guava可以提供帮助。

在Java 10中,有一个泛型支持原语的建议,但现在不可用。@PeterLawrey true!!谢谢你添加信息。我将把它添加到Java 10的主要问题中,有一个泛型支持原语的建议,但现在不可用。@PeterLawrey true!!谢谢你添加信息。我将把它添加到主要问题正文中是的,当然我没有只使用数组:/list是的,那么。是的,当然我没有只使用数组:/list是的,那么。
public interface A<AI>{
    public AI returnAll();
}