参数化类和方法:使方法返回带有java泛型的正确类型

时间:2016-01-31 20:10:30

标签: java generics

我有一个AbstractExtractionRules类,构造函数接收一个ParserAPI对象。 AbstractExtractionRules将使用许多不同的Parser API实现,每个都使用自己的“Document”抽象。

ParserAPI类有一个参数化类型,表示方法parseDocument的返回类型。

我想要一种方法在AbstractExtractionRules子类中使用ParserAPI而无需强制转换,从而使其更自然。

我认为使用java泛型,可能相应地修改构造函数参数或修改product_mediabox的调用我可以达到此目的,但我不知道该怎么做。

getParserAPI().parseDocument(htmlCode)

1 个答案:

答案 0 :(得分:3)

您可以将类型从AbstractExtractionRules传递给ParserAPI:

public abstract class AbstractExtractionRules<A, T> implements ExtractionRules<T> {
    private ParserAPI<A> parserAPI;

然后你可以在没有强制实现类的演员的情况下调用它:

public class RibeiraoVisitorRule extends AbstractExtractionRules<Document, String> {

    @Override
    public List<String> extract(String htmlCode) {
        ...
        Document doc = getParserAPI().parseDocument("");
    }

请注意,我还将传递类型T添加到ExtractionRules接口。它会影响extract()方法的返回类型。在您的示例中,您没有传递类型,因此方法的返回类型为List

相关问题