2012-09-13 52 views
3

我需要开发一个只能实现一次的接口。如果其他类尝试在同一个项目中实现相同的接口,则不应允许或发生错误。如何限制java接口在多个类中实现

interface A { 
    void someMethod(); 
} 

class B implements A { 
    void someMethod() { 
     // implementation here 
    } 
} 

现在我想限制其他类来实现接口一个

class c implements A { //this should not allowed in this project 
} 

是否有可能开发这种接口的?任何人都可以提出,我该如何去做到这一点?

+2

你为什么要这么做?制作一个只能实现一次的界面有什么可能呢? – Yuushi

回答

0

把你的interface Aclass B放在同一个包里。

所有不应执行A的类应该在此包之外。

+3

这不是一个正确的答案。没有任何东西阻止另一位开发人员在同一个包中编写另一个实现。 – allingeek

3

简单的答案,不,如果你的接口是公共/包保护是不可能的。

1

这听起来像你的设计是错误的,你的界面实际上应该只是class B的一部分。

接口的一点是,它允许您在此尝试避免的同一组方法的不同实现。

2

这打破了界面的目的。如果你只有一个实现,它可能是具体的。

接口是意思是要由多个类实现。这允许您切换实现而不必担心其实现细节。例如,接口的最常用的用途是收集框架,特别是List,SetMap

// Hides the implementation details of ArrayList within a List variable 
List<String> strs = new ArrayList<String>(); 
// Hides the implementation details of LinkedList within the same List variable 
strs = new LinkedList<String>(); 
// All code using strs is agnostic to what kind of list it is (mostly) 
strs.add("Hello, Dolly"); 
System.out.println(strs.get(0)); 

接口主要体现2个OOP概念:encapsulationpolymorphism。如果您不打算使用您的界面来完成以上两件事之一,请不要使用界面。只需使用具体(非抽象)类。在这一点上使用接口是矫枉过正的。

只有当我想要使用Java的Proxy类时,我才能想到的这个规则的例外。只有这样,1:1接口:类比率才是可接受的,因为您必须有一个接口来将实现包装在Proxy实例中。

+0

Brian我需要限制在开发阶段的一段时间内实现这个接口。否则,我知道你说的这个概念。感谢你的支持 – mrugeshthaker

0

知道A的实现的唯一全局方法是,如果他们注册自己给你,这是毫无意义的,你可以忘记这一点。


我不知道,如果你需要和你一起工作的A所有实例都具有一个共同的类之外Object.class,或者说,他们班是一样的,或者说,他们的类是B.class

无论您想要执行什么操作,都需要测试您通过的A实例上的不良情况,并且您无法处理A的实例,而您仍然无法处理该实例。

或者,对于A的每个实例您都会通过,您可以创建一个新的B并从传入的A插入所需的数据。


但首先,你应该想想你为什么要这样,没准这不是真的时也有不同A实现的问题。