gpt4 book ai didi

java - 通过父类(super class)返回与类名相同的数据类型?

转载 作者:行者123 更新时间:2023-11-29 06:51:54 24 4
gpt4 key购买 nike

我有一个 abstract class,它有一个 abstract 方法。我希望此方法返回与覆盖该方法的类相同的数据类型,而不必强制转换create的结果或必须在每个子类上做一个新的方法声明。我希望它全部从父类中无缝地声明。

我希望该方法返回一个数据类型与调用它的类相同的对象。

编辑:我删除了打印品,因为人们对我的要求感到困惑

abstract class A
{
public abstract ... create();
}

class B extends A
{
@override
public ... create()
{
return new B...;
}
}

class C extends A
{
@override
public ... create()
{
return new C...;
}
}

这样

B x1 = new B();
B x2 = x1.create();
// Since create was called on a B object
// a B object is returned, NOT AN "A" object

C y1 = new C();
C y2 = y1.create();
// create makes a C object this time,
// because it's called on a C object

// Problem: create() returns A object, even when
// called from class B or C.
// I want create() to return a B object if called from a B object.

解决这个问题的好方法是什么?谢谢。

最佳答案

我不再认为这是正确的答案。这是一个答案,但过于复杂。参见 my other answer .

在 Java 的泛型中没有“ self ”类型的概念。您能做的最好的事情就是使用自限泛型:

abstract class A<T extends A<T>>
{
public abstract T create();
}

然后,在你的子类中:

class B extends A<B>
{
@override
public B create()
{
return new B...;
}
}

关于java - 通过父类(super class)返回与类名相同的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45191187/

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