【发布时间】:2010-04-15 20:29:43
【问题描述】:
我有两个课程都extends Example。
public class ClassA extends Example {
public ClassA() {
super("a", "class");
}
...
}
public class ClassB extends Example {
public ClassB() {
super("b", "class");
}
...
}
public class Example () {
public String get(String x, String y) {
return "Hello";
}
}
所以这一切都很好。因此,假设我们有另一个名为 ExampleManager 的类。使用示例管理器,我想使用泛型类型并因此返回该泛型类型。例如
public class ExampleManager<T extends Example> {
public T getExample() {
return new T("example","example"); // So what exactly goes here?
}
}
那么我在哪里返回我的泛型类型,我如何让它真正正常工作并将Example 转换为classA 或classB?
非常感谢
【问题讨论】:
-
您正在寻找具体化的泛型。这在 Java 中不受支持。 C# 支持它。在 Java 中,泛型只是编译时。查找工厂模式,请参阅上面的链接以重复问题以获取正确答案。
-
@BalusC:你知道如何在这里应用工厂模式吗?我只是不明白如何在 Factory 中实现
E create()方法(来自 Tom Hawtin - tackline answer stackoverflow.com/questions/75175/…) -
@Roman:通过反射(
Class#newInstance()甚至获取构造函数)或仅使用new关键字。工厂模式只是为了抽象出来(这是 OP 的意图)。
标签: java generics inheritance casting