我有一个名为 DMSServiceLocator.class 的服务定位器类,其中有一个名为 getParser() 的方法,其返回类型为 Parser。我正在尝试使用扩展 Parser 的 Impl 返回一个名为 AutoMateParser 的服务,但是我收到一个编译错误,提示需要 Parser,找到 AutoMateParser。当我返回 new AutoMateServiceImpl() 而不是我的服务接口时,我没有收到任何编译错误。我的 getParser() 方法似乎没有意识到 autoMateParser 是同一类型。我尝试使用 Parser 投射 AutoMateParser,“return (Parser) autoMateParser;” 解决了编译错误,但收到了强制转换异常。我想知道是否有人知道如何做到这一点。提前致谢。
下面是我的代码示例。
应用模块类
public static void bind(ServiceBinder binder) {
binder.bind(AutoMateParser.class, AutoMateParserImpl.class);
}
DMSServiceLocator.class
public class DMSServiceLocator {
@Inject
private AutoMateParser autoMateParser;
public Parser getParser() {
if(automate) {
return autoMateParser();
} else {
//Different data scrubber, but also extends Parser
return homenetParser();
}
}
}
AutoMateParserImpl.class
public class AutoMateParserImpl extends Parser implements AutoMateParser {
protected Vehicle parseCar(String vehicleData) {
//some data scrubbing code
}
}
解析器类
public abstract class Parser {
//some csv line reader code
protected abstract Vehicle parseCar(String carData);
}