在处理注解时,我偶然发现了以下代码(它是 Hibernate @NotNull 注解):
@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {})
public @interface NotNull {
@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
public @interface List {
public NotNull[] value();
}
public String message() default "{javax.validation.constraints.NotNull.message}";
public Class<?>[] groups() default {};
public Class<? extends Payload>[] payload() default {};
}
我想知道方法定义中的 default
关键字/构造,这是我以前从未见过的。据我了解,它允许您为此方法(或注释属性)定义一个默认值。
现在我试图将此构造应用于普通界面,但失败了。这将无法编译:
public interface DefaultTest {
public String test() default "value";
}
但这行得通:
public @interface DefaultTest {
public String test() default "value";
}
所以我的问题是:default
关键字注释是特定的吗?如果是,那么反对在普通接口(interface)定义中使用此构造的原因是什么?
最佳答案
Java 8 及更高版本
是的,现在可以在接口(interface)上使用 default 关键字。有关详细信息,请参阅 Oracle's docs .
实现与您的想法略有不同。它将是:
public interface DefaultTest {
default public String test() {
return "value";
}
}
Java 7 及更早版本
default关键字只能用于注解。
如果你想要一个接口(interface)的默认返回值,你需要使用抽象类。
public abstract class DefaultTest {
public String test() {
return "value";
}
}
关于java - Java 接口(interface)中的默认方法返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3821143/