Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot infer functional interface type Java 8

I have a factory(Registry DP) which initializes the class:

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

And in the 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);
            }
        };
    }

But I keep getting Cannot infer functional interface type Error. What I am doing wrong here ?

like image 526
user3407267 Avatar asked Apr 24 '17 22:04

user3407267


1 Answers

Your defaultSupplier method has an argument type of Class. You can’t pass a lambda expression where a Class is expected. But you don’t need that method defaultSupplier anyway.

Since Test and TestWithArgs are a subtypes of Validation, the lambda expressions () -> new Test() and () -> new TestWithArgs(2,4) are already assignable to Supplier<Validation> without that method:

public class GenericFactory extends AbstractFactory {
    public GenericPostProcessorFactory() {
        factory.put("Test", () -> new Test());
        factory.put("TestWithArgs", () -> new TestWithArgs(2,4));
    }    
}
like image 55
Holger Avatar answered Sep 18 '22 07:09

Holger