Java泛型,如何正确将子类强制转换为方法?

问题描述 投票:-1回答:1

我正在尝试使用泛型,但无法弄清以下内容

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();
java generics
1个回答
1
投票

您不需要为build()使用新的(不同的)类型变量。将您的方法更改为:

© www.soinside.com 2019 - 2024. All rights reserved.