Я пытаюсь создать абстрактный базовый класс для некоторых классов построителя, чтобы можно было легко повторно использовать код между реализациями построителя.Я хочу, чтобы мои сборщики поддерживали цепочку методов, поэтому метод должен возвращать «этот» экземпляр наиболее определенного типа.Я подумал, что мог бы сделать это с помощью дженериков.К сожалению, мне не удалось сделать это без использования небезопасных операций.Возможно ли это?
Пример кода, как я пытаюсь (и как это работает) ниже.Я хотел бы избежать приведения к 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();
}
}