声明扩展某种类型的字段

时间:2012-11-30 10:30:07

标签: java generics

我的语法有些问题。我正在寻找所有的东西,找不到正确的东西(我实际上不知道,搜索的短语是什么)。所以这就是问题所在。为简单起见,假设我有4个类:

A类:

public abstract class A{
}

B级:

public class B extends A{
    //some methods and fields
}

C班:

public class C extends A{
    //some other methods
}

D班:

public class D{
    protected ? value;
}

我有一个问题,因为如果我想将?定义为{{1}的某个子类,我在class D中不知道要放什么而不是? }}。我知道一个选项只是写A而不是A,但我认为这可以更明确,例如?

这甚至可能吗?

-edit -

从下面的答案中,我看到了使用原始类型的方法。但是,任何人都可以确认这样的构造在java中不存在吗?您可以创建泛型类型<T extends A>的字段(扩展某个类),但包含此字段的类没有通用参数T

3 个答案:

答案 0 :(得分:1)

我认为您应该在运行时特定于此值类型。

public class D<T extends A>{
    protected T value;
}

D<B> d =new D<B>();
D<A> d1 = new D<A>();

答案 1 :(得分:1)

- 使用Type Parameter

<强>例如

public class MyClass<T extends A>{

   T value;

}

答案 2 :(得分:1)

使用通用类,如下所示:

public class D<T extends A> {
    protected T value;
}
当你在上面的评论中假装时,

MyClass并不依赖于T。您可以在不预先设置通配符的情况下实例化实例。因此,T在编译时仍会被A重新加载 这个概念叫做:原始类型

有关详细信息:http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html