我已經設計了一個使用接口的完整API,客戶可以使用這些接口來實現某些行爲。在內部,我想使用我自己的實現類來使用更豐富的API。我希望這些實現能夠繼續符合基於接口的API,但是Java對泛型的處理正在發揮作用。同時支持基於公共接口的API和內部具體的API嗎?
下面是一個例子:
public interface PublicAPI {
void doSomething(SomeType object);
}
public class SomeTypeImpl implements SomeType { }
public class InternalClass implements PublicAPI {
public void doSomething(SomeTypeImpl object) {
// ...
}
}
在一些情況下,可以使用公共API來指定使用通配符,如<T extends SomeType>
一個類型,但是這打破了與通用集合造成方法衝突。
所以我問你,有沒有什麼方法可以支持這種類型的設計(或更好的設計),還是註定要在我的內部類和公共API的實現之間來回轉換?
謝謝!
UPDATE
我已經得到了爲什麼它是不是真的有可能執行更具體的類型比該API提供了更好的手感。一旦任何人有你的對象的一個實例,它可以被'污染'具有較少的特定類型。
根據ACL建議,我採取了在我自己的特定包內使用內部類的方法,然後使用公共API接口爲它們創建「視圖」。一旦創建了視圖,該對象將被標記爲不純,並且不再能保證對象除接口以外的任何類型。在我自己的類中,當不純的對象被處理時我會拋出異常(因爲這意味着引用被允許提前泄漏)。
我會留下問題以進一步分析。
你想在你自己的模型中實現'SomeType'出於這個原因?如果'SomeType'已經來自API,爲什麼不實現呢? –
如何使用某種類型的ACL到您的API方法? – Napolux