У меня есть абстрактный класс java под названием FooFactory. Один из этих методов - withDate, который, очевидно, указывает на то, что я хочу в конечном итоге построить реализацию Foo с данной датой.Как написать метод для абстрактного класса, который возвращает тип реализации?
Мой вопрос в том, что. Как вернуть экземпляр моей реализации FooFactory из withDate? Вот то, что я пробовал:
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, и поэтому я не смог бы по-настоящему связать вызовы.
Является ли это тем, что я хочу сделать даже возможным?
Не следует ли расширять 'BarFooFactory'' FooFactory'? Кроме того, почему вы используете дженерики - я не вижу здесь своей цели. –
Да. Исправлена. Причина использования дженериков заключается в том, что я могу повторно использовать логику в классе FooFactory на других фабриках, которые возвращают реализации Foo. –