我正在尝试使用泛型,但无法弄清以下内容
public abstract class AbstractPage {
}
public class GlossyPage extends AbstractPage {
private PaperStyle<GlossyPage> paperStyle = new PaperStyle<>(this);
public PaperStyle styles() {
return paperStyle;
}
}
public class PaperStyle<T extends AbstractPage> {
private final T page;
public PaperStyle(T page) {
this.page = page;
}
public <T> T build() {
return (T) page;
}
}
并像这样使用它:
GlossyPage page = new GlossyPage()
.styles()
.<GlossyPage> build();
但是,这不起作用,编译器抱怨添加如下所示的强制类型转换。以上是不可能的吗?
GlossyPage page = (GlossyPage) new Book()
.styles()
.build();
您不需要为build()使用新的(不同的)类型变量。将您的方法更改为: