[英]Method Reference Using An Interface (Implemented By More Than One Class) As A Type
[英]how to restrict java interface to be implemented in more than one class
我需要開發只能實現一次的接口。 如果其他類嘗試在同一個項目中實現相同的接口,則不應該允許它或給出錯誤。
interface A {
void someMethod();
}
class B implements A {
void someMethod() {
// implementation here
}
}
現在我想限制其他類來實現接口A.
class c implements A { //this should not allowed in this project
}
是否有可能開發這種界面? 任何人都可以建議,我怎樣才能實現這一目標?
簡單的回答,如果你的界面是公共/包受保護的,那就不可能了。
這違背了界面的目的。 如果你只有一個實現,它也可能是具體的。
接口意味着由多個類實現。 這允許您切換實現,而不必擔心其實現細節。 例如,接口最常見的用途是集合框架,特別是List
, Set
和Map
。
// 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));
接口主要包含兩個OOP概念: 封裝和多態 。 如果您不打算使用界面來完成這兩件事之一,請不要使用界面。 只需使用具體(非抽象)類。 此時使用界面是過度的。
我能想到的唯一例外是當你想要使用Java的Proxy
類時。 只有這樣才能接受1:1的接口:類比率,因為你必須有一個接口來封裝Proxy
實例中的實現。
聽起來你的設計是錯誤的,你的界面實際上應該只是class B
一部分。
接口的意義在於它允許同一組方法的不同實現,您在此嘗試避免這些方法。
將您的interface A
與class B
放在同一個包中。
所有不應該實現A
的類都應該在這個包之外。
了解A
實現的唯一全局方式是,如果他們向您注冊,這是毫無意義的,您可以忘記這一點。
我不確定你是否要求你使用的所有A
實例都有一個除了Object.class
之外的公共類,或者它們的類是相同的,或者它們的類是B.class
。
無論你想要強制執行什么,你都需要測試你傳遞的A
實例的不良情況,你沒有與A
實例無關的事情。
或者,對於A
每個實例,您都可以創建一個新的B
並從傳遞的A
插入所需的數據。
但首先,你應該考慮為什么你想要這個,當有不同的A
實現時,它可能不是真正的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.