【问题标题】:What does @Override mean in this java code? [duplicate]这个java代码中的@Override是什么意思? [复制]
【发布时间】:2012-02-11 05:04:34
【问题描述】:

可能重复:
When do you use Java's @Override annotation and why?
Java, What does @Override mean?

我在查看 Drools Planner 示例源代码时遇到了这样的代码:

@Override
protected Solver createSolver() {
    XmlSolverConfigurer configurer = new XmlSolverConfigurer();
    configurer.configure(SOLVER_CONFIG);
    return configurer.buildSolver();
}

protected Solver createSolverByApi() {
    // Not recommended! It is highly recommended to use XmlSolverConfigurer with an XML configuration instead.
    SolverConfig solverConfig = new SolverConfig();

    solverConfig.setSolutionClass(NQueens.class);
    .....TRUNCATED....
    solverPhaseConfigList.add(localSearchSolverPhaseConfig);
    solverConfig.setSolverPhaseConfigList(solverPhaseConfigList);
    return solverConfig.buildSolver();
}

据我了解,createSolver()createSolverByApi() 在您显式调用它们时应该返回 Solver 对象。

@Override 在这里是什么意思? @ 术语的一般含义是什么?


编辑:我很糟糕;我无意中复制了What does @Override mean?

【问题讨论】:

标签: java


【解决方案1】:

@Java Annotations

@Override 表示该方法正在覆盖父类(在本例中为 createSolver)。

@OverrideJavadoc 状态:

表示方法声明旨在覆盖方法 在超类中声明。

此注解对于编译时检查以验证您要覆盖的方法是否有效(被正确覆盖)很有用。

【讨论】:

  • 那么,如果没有这个,方法可以被覆盖吗?如果在一个方法打算覆盖另一个方法时排除它会发生什么?
  • 可以不加注解覆盖。它只是帮助开发人员知道有一个父类方法已被子类覆盖。
【解决方案2】:

请参阅Java tutorial about annotations,以及“编译器使用的注释”部分。从相关部分快速复制粘贴

@Override——@Override 注释通知编译器该元素旨在覆盖在超类中声明的元素(覆盖方法将在标题为“接口和继承”的课程中讨论)。

【讨论】:

    【解决方案3】:

    这称为Annotation。它实际上并没有编译成特殊代码,但它有助于避免错误:本质上,它表明该方法覆盖 superclass 的方法。没有这个注解会导致警告,有这个注解但是没有一个超类有一个具有相同注解的方法甚至是一个错误

    这样可以避免重构错误:如果superclass中的方法被重命名,而没有覆盖,那么它将成为错误。

    【讨论】:

    • 对编译器没有特殊意义……如果编译器没有赋予它特殊意义,它怎么会产生编译错误。看我的回答。它在“编译器使用的注释”部分中进行了讨论,因此它对编译器肯定具有特殊意义
    • 如:没有运行时保留 AFAIK。
    • @Anony-Mousse 很好的解释,所以 +1 我也编辑了你的答案以确保正确的拼写
    【解决方案4】:

    这是 java 注释,在您的情况下,您将在方法上方使用 @Override 以确保您正在覆盖超类方法,如果您使用它并且该方法不在超类中,因为您键入它的名称错误例如在编译时会发生错误。

    【讨论】:

      【解决方案5】:

      我想添加这个: 在接口中声明的超类或方法中声明(Java 6 起)

      【讨论】:

      • 不,注解是从 Java 5 开始引入的。@Override 从 Java 5 开始引入(作者 Joshua Bloch)。
      • 自 java 5 起在超类中声明,自 java6 起在接口中声明
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 2014-01-10
      • 2018-07-07
      • 1970-01-01
      • 2021-08-12
      相关资源
      最近更新 更多