2017-01-24 127 views
1

我們有類庫爲覆蓋靜態方法的功能

class A { 
    public void callWorkflow() { 
     B b = new B(); 
    } 
} 

class B { 
    public void callStatic() { 
     C.someMethod(); 
    } 
} 

class C { 
    public static someMethod() {} 
} 

實際上,我們試圖改變靜態方法someMethod的功能。有沒有辦法解決這個問題,而不改變調用層次結構?

+0

您可能會發現在你的答案[爲什麼不容許的Java靜態方法壓倒一切的?](http://stackoverflow.com/q/2223386/1072229) –

回答

1

無法覆蓋static方法。

這就是爲什麼這些方法中的一個最好調用靜態方法:

  • 注入另一個對象(服務),將在非靜態方法提供的功能,並調用它通過被注入的對象
  • 使靜態方法瘦包裝,只是委託的工作,可以(在SLF4J的記錄器等)來配置一些非靜態對象
3

你不能只是一個Override方法static。在我看來,從方法someMethod()中刪除static,然後在類B內創建類C的對象。然後調用該方法。

Class A{ 
    public void callWorkflow() { 
     B b = new B();} 
} 
Class B{ 
    public void callStatic(){ 
     C c = new C(); 
     c.someMethod();} 
} 
Class C{ 
    public someMethod(){} 
} 
+0

C類是在外部庫,所以它不可能改變那裏的實現。 –