【问题标题】:How to prevent an interface from getting extended如何防止接口被扩展
【发布时间】:2010-08-21 15:33:42
【问题描述】:

在 Java 中,有没有办法防止扩展接口。

由于 final 无法添加到 interface ,我很想知道是否有办法防止扩展接口。

【问题讨论】:

  • 这样做的动机是什么?如果您了解接口是什么以及它们的用途,我认为在语义上没有任何收获。
  • 如果你不创建接口,除非其他人创建它,否则它不能扩展,所以告诉 no1。

标签: java oop interface


【解决方案1】:

这里的问题是一个概念问题。接口旨在扩展,因为它们不能按原样使用。

您可以做的是将接口放入包中并为其提供默认可见性。这样,只有该包中的类才能实现该接口。

但是使用该解决方案,您也无法使用该包之外的接口,因此它不是真正的解决方案。

【讨论】:

  • 我认为他的意思是从给定的接口扩展了另一个接口。
  • 是的,但概念仍然是关键:接口只是表示某些方法以某种方式工作的一种方式。扩展一个接口就是说系统中有一些其他接口。禁止以与“final”关键字与类相同的方式定义接口是没有意义的,如果扩展该类,实际代码最终可能会以与原始设计相反的方式使用。
【解决方案2】:

没有办法阻止扩展接口。

您可以检测是否有人在运行时使用反射扩展了您的界面。

【讨论】:

  • 能否详细说明如何通过反射找到接口是否被扩展?
  • @JWhiz:你的第二个问题和这个问题非常相似:stackoverflow.com/questions/435890/… 唯一的区别是你对接口感兴趣,而不是类,但技术是一样的。
【解决方案3】:

这与之前提出的问题非常相似——final interface in java

我给出了两个答案。

  1. 是的,通过byte code engineering。生成的接口无法扩展但没有实用价值
  2. 是的,annotations 是其他接口无法扩展的接口。

此外,您可以将接口放在类中,给它私有访问修饰符,并确保该类文件中没有接口扩展它。

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多