2012-09-13 51 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實現的問題。