java泛型返回int[]而不是integer[]

qybjjes1  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(344)

我有这样的想法:

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

xfb7svmp

xfb7svmp1#

不,你不能,但是你可以替换你的接口

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

通过

public interface A<AI>{
    public AI returnAll();
}

如果你只处理数组。否则,你就走运了。如果你能用 List s而不是数组,那么guava ints#aslist会有所帮助。

im9ewurl

im9ewurl2#

泛型只支持 Package 类。不能将其用于基本类型。 It allows primitive types but it uses autoboxing for the same. java中的泛型完全是编译时构造—编译器将所有泛型使用转换为正确类型的类型转换。
为什么泛型只支持 Package 类作为泛型使用的任何东西都需要可转换为对象,并且基元类型不能转换为对象。这就是泛型不支持它的原因。
编辑:
在Java10中,有一个泛型支持原语的建议,但现在不可用(彼得拉弗里在评论中提供的信息)

mitkmikd

mitkmikd3#

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> 因为现在不能将基元类型用作泛型类型(希望如此)。

相关问题