У меня есть класс-строитель, который возвращает себя из большинства методов, чтобы обеспечить цепочку. Чтобы сделать эту работу с дочерними классами, я хочу, чтобы родительские методы возвращали экземпляры дочернего элемента, чтобы дочерние методы были доступны для цепочки до конца.
public class BaseBuilder<T extends BaseBuilder<T>> {
public T buildSomething() {
doSomeWork();
/* OPTION #1: */ return this; // "Type mismatch: cannot convert from BaseBuilder<T> to T"
/* OPTION #2: */ return T.this; // "Type mismatch: cannot convert from BaseBuilder<T> to T"
/* OPTION #3: */ return (T) this; // "Type safety: Unchecked cast from SqlBuilder<T> to T"
}
}
public class ChildBuilder extends BaseBuilder<ChildBuilder> {}
Параметры # 1 и # 2 приводят к ошибкам компиляции, а опция № 3 - предупреждение (хотя оно может быть подавлено с помощью @SuppressWarnings("unchecked")
). Есть ли лучший подход здесь? Как я могу безопасно отключить Basebuilder для Childbuilder?