gpt4 book ai didi

java - 如何为返回实现类型的抽象类编写方法?

转载 作者:行者123 更新时间:2023-12-03 18:59:04 27 4
gpt4 key购买 nike

我有一个名为 FooFactory 的 Java 抽象类。 withDate 是其中一种方法,它显然表明我最终想用给定的日期构建 Foo 的实现。

我的问题是这样的。如何从 withDate 返回我的 FooFactory 实现实例?这是我尝试过的:

abstract class FooFactory<T extends FooFactory<T>>
{
private date;

public T withDate(Date date)
{
this.date = date;
// Does not work
return this;
}

public abstract Foo build();

// more with methods and a build method
}

然后我想做的是拥有这样的东西:

public final class BarFooFactory extends FooFactory<BarFooFactory>
{
@Override
public BarFoo build()
{
BarFoo barFoo = new BarFoo()
super.populateFooProperties(barFoo);
return barFoo;
}
}

对于那些好奇为什么我只是不想返回 FooFactory 的人来说,原因是编译器将在 FooFactory 的上下文中解释 future 的调用和构建调用,因此我无法真正链接调用。

我想做的事有可能吗?

最佳答案

我见过适用于类似问题的解决方案是定义一个返回子类实例的 getThis() 抽象方法。它避免了未经检查的转换警告,但可能会激怒一些纯粹主义者。

abstract class FooFactory<T extends FooFactory<T>> {
private Date date;

public abstract T getThis();

public T withDate(Date date) {
this.date = date;
return getThis();
}

关于java - 如何为返回实现类型的抽象类编写方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28944922/

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