我的语法有些问题。我正在寻找所有的东西,找不到正确的东西(我实际上不知道,搜索的短语是什么)。所以这就是问题所在。为简单起见,假设我有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
?
答案 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