說我有一個類也是太脂肪一個具體案件的方法,但適合其中約一半,所以它是沒有辦法,只是擴大它。同時,我想隱藏一個事實,即我已經從最終用戶擴展了這個胖類。然後,我想限制一些新的接口類,並讓不需要的方法拋出UnsupportedOperationException
:Java:我是否缺少限制模式?我需要限制實施只有選定的方法
public class TooFatClass {
public void usefulMethodOne() { ... };
public void usefulMethodTwo() { ... };
public void usefulMethodThree() { ... };
...
public void notUsefulMethodOne() { ... };
public void notUsefulMethodTwo() { ... };
public void notUsefulMethodThree() { ... };
...
}
public interface OnlyUsefulMethods {
public void usefulMethodOne();
public void usefulMethodTwo();
public void usefulMethodThree();
...
public static OnlyUsefulMethods create() {
return new OnlyUsefulMethodsImpl();
}
}
// notice it is package-private
class OnlyUsefulMethodsImpl extends TooFatClass implements OnlyUsefulMethods {
public void usefulMethodOne() { ... };
public void usefulMethodTwo() { ... };
public void usefulMethodThree() { ... };
...
public void notUsefulMethodOne() { throw new UnsupportedOperationException(); };
public void notUsefulMethodTwo() { throw new UnsupportedOperationException(); };
public void notUsefulMethodThree() { throw new UnsupportedOperationException(); };
...
}
所以,OnlyUsefulMethodsImpl
例如可以強制轉換爲TooFatClass
,如果用戶真正想要的,但它隱藏這個事實,不強迫用戶這樣做。
然而,Java不允許靜態方法的實現在接口(這是愚蠢的,使其OnlyUsefulMethods
抽象的,我認爲),所以我用這個臭的代碼完成:
public interface OnlyUsefulMethods {
public void usefulMethodOne();
public void usefulMethodTwo();
public void usefulMethodThree();
...
public static final class Factory {
public static OnlyUsefulMethods create() { return new OnlyUsefulMethodsImpl(); }
public static OnlyUsefulMethods create(Options options) {
return new OnlyUsefulMethodsImpl(options); }
}
}
即使我」我會在界面之外移動一個Factory
它看起來太複雜,不能用於一個類的情況下,我想要一個工廠方法,而不顯示OnlyUsefulMethodsImpl
以外。
我做錯了什麼/太複雜,缺少一些限制模式?
可能涉及到這個問題(反正有一些答案,可能是合適的,我不知道):
- Why can't I define a static method in a Java interface?
- Why can't I declare static methods in an interface?
是的,代表團在這種情況下是正確的。謝謝!我已經完成了它,但不知何故,代碼中的'OnlyUsefulMethods'接口仍然認爲它仍然是必需的。你睜開了眼睛,謝謝你! :) –