2010-08-21 84 views
6

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

由于final不能被添加到interface,我很想知道是否有方法,以防止扩展接口。

+4

这样做的动机是什么?在我看来,从语义上讲,没有什么可以获得,如果你明白接口是什么以及它们用于什么。 – Santa 2010-08-21 16:29:30

+0

如果你不创建它不能被扩展的接口,除非some1创建它,所以告诉no1。 – IAdapter 2010-08-21 20:29:56

回答

2

没有办法阻止扩展接口。

您可以检测到有人在运行时使用反射扩展了您的接口。

+0

您能否详细说明我们如何才能找到接口是否通过反射扩展? – JWhiz 2010-08-21 15:53:25

+0

@JWhiz:你的第二个问题与这个非常相似:http://stackoverflow.com/questions/435890/find-java-classes-implementing-an-interface唯一的区别是你对接口感兴趣,而不是类,但技术是一样的。 – 2010-08-21 16:05:46

3

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

你可以做的是把接口放在一个包中,并给它默认的可见性。只有该包中的类才能实现该接口。

但是使用该解决方案,您也失去了使用该包之外的接口的可能性,因此它不是真正的解决方案。

+0

我认为他意味着从给定的接口扩展了另一个接口。 – 2010-08-21 15:45:52

+3

没错,但这个概念仍然是关键:接口只是说某些方法以某种方式工作的一种方式。扩展接口就是说系统中还有一些其他接口。禁止以与“最终”关键字与类一起工作的方式来定义接口是没有意义的,其中实际代码可能最终以与原始设计相反的方式使用,如果该类被扩展的话。 – 2010-08-21 15:53:05

0

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

我给出了两个答案。

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

另外,你可以把接口放在一个类中,给它一个私人访问修饰符,并确保该类文件中没有接口扩展它。