DMSServiceLocator.class というサービス ロケーター クラスがあり、その中に getParser() というメソッドがあり、戻り値の型は Parser です。パーサーを拡張する Impl を使用して AutoMateParser というサービスを返そうとしていますが、パーサーが必要であるというコンパイル エラーが発生し、AutoMateParser が見つかりました。サービス インターフェイスではなく new AutoMateServiceImpl() を返すと、コンパイル エラーは発生しません。私の getParser() メソッドは、 autoMateParser が同じタイプであることを認識していないようです。「return (Parser) autoMateParser;」と AutoMateParser を Parser でキャストしてみました。コンパイル エラーは解決されましたが、キャスト例外が発生しました。誰かがこれを行う方法を知っているかどうか疑問に思っています。前もって感謝します。
以下は私のコードのサンプルです。
AppModule.class
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);
}