Java 可以在超类中声明一个返回subclass类型对象的方法吗?
我有一个叫做计算器的类,它被许多其他类扩展。它有一个名为intern()的方法,其内容如下:Java 可以在超类中声明一个返回subclass类型对象的方法吗?,java,generics,type-safety,Java,Generics,Type Safety,我有一个叫做计算器的类,它被许多其他类扩展。它有一个名为intern()的方法,其内容如下: public DailyValueCalculator intern() { if (TimeSeriesIterator.containsMatchingCalculator(this)) { TimeSeriesIterator.removeCalculator(this); return TimeSeriesIterator.getMatchingCa
public DailyValueCalculator intern() {
if (TimeSeriesIterator.containsMatchingCalculator(this)) {
TimeSeriesIterator.removeCalculator(this);
return TimeSeriesIterator.getMatchingCalculator(this);
} else {
return this;
}
}
如果我有,比如说,一个叫bc的计算机操作员,我希望能够通过以下方式实习
bc = bc.intern();
现在我不得不说
bc = (BetaCalculator) bc.intern();
有没有办法使intern()方法始终具有调用它的类型的返回类型?如果没有办法做到这一点,有没有不可能的原因
我知道可能的解决方案,但我不满意:
不,没有办法做到这一点。想想看:我知道intern方法只会返回同一个类,但编译器怎么能返回呢?如果自己键入超类,就可以这样做。下面是一个示例:
public abstract class SuperClass<S extends SuperClass<S>> {
public S intern() {
return (S) this;
}
public static class SubClass extends SuperClass<SubClass> {
private void methodOnlyInSubClass() {
System.out.println("subclass method");
}
public void myMethod() {
SubClass sub = intern();
sub.methodOnlyInSubClass();
}
}
}
公共抽象类超类{
公共事务助理实习生(){
归还本文件;
}
公共静态类子类扩展了超类{
私有void methodOnlyInSubClass(){
System.out.println(“子类方法”);
}
公共方法(){
子类sub=intern();
sub.methodOnlyInSubClass();
}
}
}
检查工厂模式和ist变体…对,这是我在上面的解决方案3中想到的--我不想这样做,因为这个计算器对象是API的一部分,我们的客户对java的知识非常有限,如果在创建计算器时要求它们自己键入类,则可能会感到困惑。也许是最好的办法regardless@Accipheran另一种选择是,您可以编写这样的静态方法publicstatics intern(S something)
,但它是静态的。