有没有办法避免在此分层Builder模式中进行未经检查的类转换?
public abstract class BaseBuilder <T, B extends BaseBuilder<T,B>> {
public B setB1(String b1) {
this.b1 = b1;
return (B) this; // can I make this unchecked cast go away?
}
abstract public T build();
String b1;
}
Run Code Online (Sandbox Code Playgroud)
不,答案不是:
return B.class.cast(this);
Run Code Online (Sandbox Code Playgroud)
是的,我知道我可以使用@SuppressWarnings
如前所述,这是不安全的,因此无法完成。B扩展BaseBuilder<T,B>,但BaseBuilder<T,B>(类型this)不扩展B。递归边界在Java中几乎从未使用过,并且不会给您提供自我类型。您应该摆脱它。
您可以添加一个抽象方法,以使实现类必须提供以下实例B:
public abstract class BaseBuilder <T, B> {
abstract public B getB();
public B setB1(String b1) {
this.b1 = b1;
return getB();
}
abstract public T build();
String b1;
}
Run Code Online (Sandbox Code Playgroud)