1. ホーム
  2. java

[解決済み] 機能インターフェイスの型を推論できない Java 8

2022-02-18 18:48:01

質問

クラスを初期化するファクトリー(Registry DP)を持っています。

public class GenericFactory extends AbstractFactory {

    public GenericPostProcessorFactory() {
        factory.put("Test",
                defaultSupplier(() -> new Test()));
        factory.put("TestWithArgs",
                defaultSupplier(() -> new TestWithArgs(2,4)));
    }

}

interface Validation

Test implements Validation
TestWithArgs implements Validation

そしてAbstractFactoryでは

 protected Supplier<Validation> defaultSupplier(Class<? extends Validation> validationClass) {
        return () -> {
            try {
                return validationClass.newInstance();
            } catch (InstantiationException | IllegalAccessException e) {
                throw new RuntimeException("Unable to create instance of " + validationClass, e);
            }
        };
    }

しかし、私はCannot infer functional interface type Errorを取得し続けます。私はここで何が間違っているのですか?

どうすればいいですか?

あなたの defaultSupplier メソッドの引数の型は Class . ラムダ式に Class が期待されます。しかし、あなたはそのメソッドを必要としない defaultSupplier のように、とにかく

から TestTestWithArgs のサブタイプです。 Validation の場合、ラムダ式は () -> new Test()() -> new TestWithArgs(2,4) にはすでに割り当て可能です。 Supplier<Validation> このメソッドなしでも

public class GenericFactory extends AbstractFactory {
    public GenericPostProcessorFactory() {
        factory.put("Test", () -> new Test());
        factory.put("TestWithArgs", () -> new TestWithArgs(2,4));
    }    
}