gpt4 book ai didi

java - 可以在父类(super class)中声明一个返回子类类型对象的方法吗?

转载 作者:行者123 更新时间:2023-12-02 07:49:56 25 4
gpt4 key购买 nike

我有一个名为 Calculator 的类,它由许多其他类扩展。它有一个名为 intern() 的方法,其内容如下:

   public DailyValueCalculator intern() {
if (TimeSeriesIterator.containsMatchingCalculator(this)) {
TimeSeriesIterator.removeCalculator(this);
return TimeSeriesIterator.getMatchingCalculator(this);
} else {
return this;
}
}

如果我有一个名为 bc 的 BetaCalculator,我希望能够通过说

来实习它
bc = bc.intern();

目前我不得不说

bc = (BetaCalculator) bc.intern();

有什么方法可以使 intern() 方法始终具有调用它的类型的返回类型吗?如果没有办法做到这一点,是否有理由不可行?

我知道但不满意的可能解决方案:

  1. 重写我编写的每个计算器中的 intern() 方法
  2. 向 intern() 方法传递一个 Class 并让它返回一个 T (例如

    T intern(Class returnType){...}

  3. 为 DailyValueCalculator 提供类型 (即使其成为 DailyValueCalculator ),所有子类都需要指定其中 T 等于子类的类型,然后让 intern() 返回 T。

最佳答案

如果你用它自己输入你的父类(super class),你就可以做到这一点。这是一个例子:

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();
}

}

}

关于java - 可以在父类(super class)中声明一个返回子类类型对象的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10337066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com