Spring 弹簧&x27;使用Java8的s@Conditional注释
我使用的是Spring 弹簧&x27;使用Java8的s@Conditional注释,spring,java-8,spring-annotations,spring-java-config,Spring,Java 8,Spring Annotations,Spring Java Config,我使用的是@Conditional注释,必须提供条件接口的匹配()的实现。由于条件是一个功能接口,我如何使用Java 8 lambda在注释中提供实现而不是提供实现 @Conditional(value = MyCondition.class) class MyCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetad
@Conditional
注释,必须提供条件
接口的匹配()的实现。由于条件
是一个功能接口
,我如何使用Java 8 lambda在注释中提供实现而不是提供实现
@Conditional(value = MyCondition.class)
class MyCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return ifMatches;
}
}
你不能
lambda是类的实例,@Conditional
需要类本身
兰姆达酒店
Function<String, String> capitalize = text -> text.substring(0, 1).toUpperCase() + text.substring(1).toLowerCase();
Function capitalize=text->text.substring(0,1).toUpperCase()+text.substring(1).toLowerCase();
在功能上与相同
Function<String, String> capitalize = new Function<String, String>() {
public String apply(String text) {
return Function<String, String> capitalize = text -> text.substring(0, 1).toUpperCase() + text.substring(1).toLowerCase();
}
};
函数大写=新函数(){
公共字符串应用(字符串文本){
返回函数capitalize=text->text.substring(0,1).toUpperCase()+text.substring(1).toLowerCase();
}
};
两者都是匿名类的实例,而不是匿名类本身。实际上没有办法访问匿名类(在反射之外,但不能在注释中使用反射)
在需要类的地方传递lambda就像在需要类的地方传递字符串一样。也就是说,类似这样的事情:
public @interface MyAnnotation {
Class<?> value();
}
@MyAnnotation("this is a string")
public class MyClass {
}
public@interface-MyAnnotation{
类值();
}
@MyAnnotation(“这是一个字符串”)
公共类MyClass{
}
您不希望它工作。对于lambda不能工作的这种情况,有没有标准的方法?毫无疑问,lambda在目标类型是功能接口实例的情况下工作-例如void doSomething(函数函数)
-但在目标类型是类的情况下不工作-例如void doSomething(类