java - Java 接口(interface)中的默认方法返回值

标签 java interface annotations language-features

在处理注解时,我偶然发现了以下代码(它是 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/

相关文章:

java - 如何让 Hibernate 忽略不在实体中的表列?

java - vaadin 7.75 如何将组合框添加到网格中?

java - 使用注释的 native hibernate/jpa 查询中标量值的问题

C# : I have problem with createing implement interface object

java - 实现Clonable接口(interface),但不必重写clone()方法

java - 如何将注释类型作为方法参数传递?

c++ - 成员变量不同 "kinds"的区别

java - 如何在处理中使用相对路径而不是绝对路径?

java - 在安卓上打开文件

java - 从主类中的接口(interface)调用默认方法