我有一个AbstractExtractionRules类,构造函数接收一个ParserAPI对象。 AbstractExtractionRules将使用许多不同的Parser API实现,每个都使用自己的“Document”抽象。
ParserAPI类有一个参数化类型,表示方法parseDocument的返回类型。
我想要一种方法在AbstractExtractionRules子类中使用ParserAPI而无需强制转换,从而使其更自然。
我认为使用java泛型,可能相应地修改构造函数参数或修改product_mediabox
的调用我可以达到此目的,但我不知道该怎么做。
getParserAPI().parseDocument(htmlCode)
答案 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
。