我需要向某些类实现的接口添加默认方法,但是我的IDE抱怨(bean may not have been initialized
)。
代码将是这样的:
public interface IValidator {
MyValidationBean beanToBeAutowired;
...
default Boolean doSomeNewValidations(){
return beanToBeAutowired.doSomeNewValidations();
}
}
是否只是不允许自动装配到接口中,或者代码有问题?
在界面上使用@Component
没什么区别。
我宁愿保留这种设计,也不要使用抽象类。
答案 0 :(得分:1)
我可以想到以下解决方案-
public interface IValidator {
public Service getBeanToBeAutowired();
default Boolean doSomeNewValidations(){
return getBeanToBeAutowired().doSomeNewValidations();
}
}
public class ValidatorClass implements IValidator {
@Autowire private Service service;
@Override
public Service getBeanToBeAutowired() {
return service;
}
}
答案 1 :(得分:0)
在Java中无法将变量添加到接口中。默认情况下,它将是一个public static final
常量。因此,您必须执行以下任一操作:
MyValidationBean beanToBeAutowired = new MyValidationBeanImpl();
或以下内容:
MyValidationBean beanToBeAutowired();
default Boolean doSomeNewValidations(){
return beanToBeAutowired().doSomeNewValidations();
}
您可以在实现类中覆盖beanToBeAutowired
方法。
答案 2 :(得分:0)
只是一个想法 ,发送验证信息bean
以与parameter
交互;
public interface IValidator {
default Boolean doSomeNewValidations(MyValidationBean beanToBeAutowired){
return beanToBeAutowired.doSomeNewValidations();
}
}
您的callerClass
;
public class CallerClass implements IValidator{
@Autowired
MyValidationBean beanToBeAutowired;
...
doSomeNewValidations(beanToBeAutowired);
}