【问题标题】:What difference does it make to declare a Java interface method signature as final and non-final将 Java 接口方法签名声明为 final 和 non-final 有什么区别
【发布时间】:2011-09-18 02:00:37
【问题描述】:

在 Java 接口中将方法签名声明为 final 和 non-final 有什么区别?

int setName(String name);

int setName(final String name);

【问题讨论】:

标签: java interface final


【解决方案1】:

我在谷歌上能找到的最完整的答案是this one

很高兴他们提到了使用匿名内部类的链接,因为它是最终参数的强大用例。

问候, 斯蒂芬

【讨论】:

    【解决方案2】:

    Section 8.4.1 Java 语言规范允许将任何方法声明中的参数(包括接口中的参数)声明为 final。但是,由于这不会影响方法的signature,因此将抽象函数的参数声明为final 无效。由于接口中的所有方法都是implicitely abstract,因此两种变体是等价的。

    【讨论】:

      【解决方案3】:

      一些偶然的差异

      • IDE 可以使用它作为提示。例如当您让 IDE 自动生成您实现的方法时,它将默认设置参数 final,就像它会重用相同的参数名称一样,即使这些参数名称也不是签名的一部分。

      • 修饰符 final 可通过反射获得,并且可以被框架用于某些隐含目的。

      【讨论】:

      • 想知道final 是否会导致 OSGI 等问题?
      • @vikingsteve 如果您使用 Karaf+iPOJO,它将设置最终字段。 (并根据需要更改它们)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 2011-10-02
      相关资源
      最近更新 更多