无法推断功能接口类型 Java 8

2022-09-03 15:22:03

我有一个工厂(注册表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

在抽象工厂

 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);
            }
        };
    }

但我不断得到无法推断功能接口类型错误。我在这里做错了什么?


答案 1

方法的参数类型为 。您无法在预期为 的 lambda 表达式中传递 lambda 表达式。但无论如何,您都不需要这种方法。defaultSupplierClassClassdefaultSupplier

由于 和 是 的子类型,因此 lambda 表达式已经可以在没有该方法的情况下分配到:TestTestWithArgsValidation() -> 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));
    }    
}

答案 2

推荐