【发布时间】:2015-02-04 20:03:49
【问题描述】:
假设我们有一个具有以下方法的类:
public class Entry {
private String name;
public static Entry getOrCreate(String name) {
// ...
return new Entry(name);
}
}
这个类可能是子类(例如SubEntry),并且“getOrCreate”背后的逻辑不会改变。但子类不应返回 Entry 类型的新对象,而是相应子类的类型(例如 return SubEntry(name))
如果不对Entry 的每个子类重新实现方法getOrCreate,我如何才能实现这一点?这种技术有术语吗?
【问题讨论】:
-
我认为泛型会让你到达那里。见docs.oracle.com/javase/tutorial/java/generics/types.html
-
@ochi,更准确地说是泛型 + 反射,因为如果使用泛型,他将需要反射来创建实例
-
@AndyBrown 够公平的!我只是不确定静态方法的要求有多严格。另外,您可以随时返回
Object对吗? -
这可能会有所帮助:stackoverflow.com/questions/14353620/… 但实际上将静态方法添加到每个子类会更容易。如果确实有很多重复的代码,您可以将其分解为基类中的辅助函数。
-
您希望如何创建
SubEntry对象,您要调用:Entry.getOrCreate(name),或SubEntry.getOrCreate(name),或new SubEntry(name)?
标签: java inheritance types casting