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 ?
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));
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.