Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 弹簧&x27;使用Java8的s@Conditional注释_Spring_Java 8_Spring Annotations_Spring Java Config - Fatal编程技术网

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(类