【问题标题】:Extending ArrayList of classes implementing certain classes containing generics doesn't work?扩展实现某些包含泛型的类的类的 ArrayList 不起作用?
【发布时间】:2012-12-23 08:01:08
【问题描述】:

有人知道为什么这不起作用吗?

public class ArrayList<E extends EXTDBinterface<T>> 
    extends java.util.ArrayList<E> implements List<E>,
    RandomAccess, Cloneable, java.io.Serializable {}

Eclipse 抱怨 T 没有被解析为一个类型...是否无法为扩展 EXTDBinterface&lt;T&gt; 的类型扩展 ArrayList 类?关键是我想在课堂上使用T,但遗憾的是只有这样才有效:

public class ArrayList<E extends EXTDBinterface> 
    extends java.util.ArrayList<E> implements List<E>,
    RandomAccess, Cloneable, java.io.Serializable {}

但是如何在运行时获得EXTDBinterface 的泛型类型T...?

【问题讨论】:

    标签: java class generics arraylist


    【解决方案1】:

    如何在运行时获取EXTDBinterface的泛型类型T

    鉴于 Java 使用了type erasure,您不能这样做。如果您需要实际类型,则必须将其传入(通常作为Class-typed 参数)

    【讨论】:

    • 感谢您的回答。可悲的是,我认为你是对的......在这里查看疯狂的解决方案^^。似乎没有一个工作......
    • 查看bellum 的回答。似乎在做我想做的事!
    【解决方案2】:

    您必须将T 定义为类的类型参数

    public class ArrayList<T, E extends EXTDBinterface<T>> 
        extends java.util.ArrayList<E> implements List<E>,
        RandomAccess, Cloneable, java.io.Serializable {}
    

    【讨论】:

    • 感谢您的回答。 Eclipse 对此抱怨更多^^。但它会编译吗?
    • 嗯,我编译得很好,eclipse抱怨什么?
    • 感谢您的回答。是的,在您编辑后它可以工作!但是您是在bellum 的回答之前还是之后编辑的?因为它都说 43 分钟 ^^
    【解决方案3】:

    首先不起作用,因为您没有设置类型T。 此外,您不需要再次扩展和实现所有东西,因为 ArrayList 已经有了这个。 写,例如:

    class ArrayList<T,E extends EXTDBinterface<T>> 
    extends java.util.ArrayList<E>{}
    

    【讨论】:

    • 是的,感谢您对移除工具的额外修正!这是正确答案,但不知道是你还是GanGnaMStYleOverFlowErroR第一个^^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    相关资源
    最近更新 更多