Java 是否有一个“问题”;“的超类”;在泛型中定义类型的方法或“仅使用”;扩展;?

Java 是否有一个“问题”;“的超类”;在泛型中定义类型的方法或“仅使用”;扩展;?,java,generics,Java,Generics,其思想是执行如下操作,并在编译时让编译器检查toLoad是否是一个可以包含AType对象的数组(即:AType extends或是T NOT extends或是AType)。有没有办法用泛型实现这一点 private List<AType> aList_; <T superclassof AType> T[] loadArray(T[] toLoad) { for(int i = 0; i < alist_.size(); ++i) { t

其思想是执行如下操作,并在编译时让编译器检查toLoad是否是一个可以包含AType对象的数组(即:AType extends或是T NOT extends或是AType)。有没有办法用泛型实现这一点

private List<AType> aList_;

<T superclassof AType> T[] loadArray(T[] toLoad) {
    for(int i = 0; i < alist_.size(); ++i) {
        toLoad[i] = (T)aList_.get(i);
}
私有列表;
T[]加载数组(T[]到加载){
对于(int i=0;i
更改我的答案。是的,有一个“super”关键字可用于泛型,但我认为它在这里不起作用

以下是如何使用它的说明:


您可能应该做的是返回列表上的Collections.toArray(),并将其绑定到您正在使用的类型(可能是泛型本身)。我不认为您真的需要将返回类型定义为任何超类。

不……Java不允许类型变量的下限,即使有一些有效的用例……比如您的


如果您使用
列表
,我们可以使用通配符和下限
列表。据我所知不是这样。您能解释一下为什么要这样做吗?这是一个普遍的问题-上面的问题只是为了说明一个有效的潜在需求:)数组可能有任何分配给它的对象,而数组元素类型是超级类型ie:java.util.List中的“T[]toArray(T[]a)”方法在编译时未进行类型检查,但可以引发运行时异常。它不会编译。可能在java 9中。
<L extends List<? super A> L load(L toLoad) 
{
    for(int i = 0; i < alist_.size(); ++i) 
        toLoad.set(i, aList_.get(i) );
    return toLoad;
}
Object[] array = new Object[length];

load(new Wrapper<>(array));

class Wrapper<E> implements List<E>
{
    E[] array;

    Wrapper(E[] array){ this.array=array; }

    E set(int index, E element)
    {
        check index<array.length
        array[index] = element;
    }