gpt4 book ai didi

java - 抽象方法中声明的实现的动态返回类型

转载 作者:行者123 更新时间:2023-12-02 04:58:19 25 4
gpt4 key购买 nike

我正在寻找一种方法,在抽象方法中将返回类型作为调用该方法的实现类型。

换句话说,我想写这样的东西:

public class GenericClass {

public <T extends GenericClass> T returnMyself() {
return (T)this; // Compiler warning, unsafe cast
}
}

public class Implem1 extends GenericClass {}

public class Implem2 extends GenericClass {}

public class Main {

public static void main(String[] args) {
Implem1 implem1 = new Implem1();
Implem1 again1 = implem1.returnMyself(); // Works fine, the type is inferred by the type of again1, I think
Implem1 again2 = implem1.<Implem1>returnMyself(); // Works fine, the type is explicitly asked by <Implem1>
Implem2 again3 = implem1.returnMyself(); // Works fine while it shouldn't.
}

}

我正在寻找一种声明方法的方法,以便在编译时,returnMyself()只能返回调用它的实现的类型(在我的示例中,implem1是Implem1类型),并确保代码调用不能弄错/混合类型。

我搜索了很多,但在任何地方都找不到答案(有些主题看起来相似,但想要更一般的情况,而不是明确调用该方法的实现类型)。

一些答案​​是正确的,但总是暗示要重写每个实现类中的方法,这对我来说可能很麻烦且容易出现错误。理想情况下,我正在寻找一种只需在抽象类中编写一次的方法。

任何帮助/答案表示赞赏:D

最佳答案

你可以这样做:

public class Parent {
public Parent returnMyself() {
return this;
}
}

public class Child extends Parent {
public Child returnMyself() {
return this;
}
}

这没有问题,因为如果您将 Child 实例存储在 Parent 变量中,那么您期望 Parent 返回类型为 returnMyself()。即使它实际上是一个 Child 对象,由 returnMyself() 返回的 Child 也会扩展 Parent,所以你就可以了.

关于java - 抽象方法中声明的实现的动态返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28544022/

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