Я пытаюсь иметь абстрактный базовый класс для некоторых классов-конструкторов, поэтому я могу легко повторно использовать код между реализациями Builder. Я хочу, чтобы мои разработчики поддерживали цепочку методов, поэтому метод должен возвращать экземпляр "this" самого конкретного типа. Я подумал, что я, возможно, сделаю это с помощью дженериков. К сожалению, мне не удалось это сделать без использования небезопасных операций. Возможно ли это?
Пример кода, как я его пытаюсь (и как это работает) ниже. Я бы хотел, чтобы избежать нажатия на T в "foo()" (что вызывает непроверенное предупреждение), можно ли это сделать?
public class Builders
{
public static void main( final String[] args )
{
new TheBuilder().foo().bar().build();
}
}
abstract class AbstractBuilder<T extends AbstractBuilder<?>>
{
public T foo()
{
// set some property
return (T) this;
}
}
class TheBuilder extends AbstractBuilder<TheBuilder>
{
public TheBuilder bar()
{
// set some other property
return this;
}
public Object build()
{
return new Object();
}
}