簡體   English   中英

如何限制java接口在多個類中實現

[英]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
}

是否有可能開發這種界面? 任何人都可以建議,我怎樣才能實現這一目標?

簡單的回答,如果你的界面是公共/包受保護的,那就不可能了。

這違背了界面的目的。 如果你只有一個實現,它也可能是具體的。

接口意味着由多個類實現。 這允許您切換實現,而不必擔心其實現細節。 例如,接口最常見的用途是集合框架,特別是ListSetMap

// 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 Aclass B放在同一個包中。

所有不應該實現A的類都應該在這個包之外。

了解A實現的唯一全局方式是,如果他們向您注冊,這是毫無意義的,您可以忘記這一點。


我不確定你是否要求你使用的所有A實例都有一個除了Object.class之外的公共類,或者它們的類是相同的,或者它們的類是B.class

無論你想要強制執行什么,你都需要測試你傳遞的A實例的不良情況,你沒有與A實例無關的事情。

或者,對於A每個實例,您都可以創建一個新的B並從傳遞的A插入所需的數據。


但首先,你應該考慮為什么你想要這個,當有不同的A實現時,它可能不是真正的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM