我有一个名为 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/