无法推断JAVA 8的功能接口类型

use*_*267 13 java registry lambda java-8

我有一个工厂(注册表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
Run Code Online (Sandbox Code Playgroud)

并在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);
            }
        };
    }
Run Code Online (Sandbox Code Playgroud)

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

Hol*_*ger 9

您的defaultSupplier方法的参数类型为Class.你不能传递一个lambda表达式,其中a Class是预期的.但是你无论如何都不需要这种方法defaultSupplier.

由于TestTestWithArgsValidationlambda表达式的子类型,() -> 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));
    }    
}
Run Code Online (Sandbox Code Playgroud)