2017-01-24 4 views
1

Wir haben Klassenbibliothek alsstatische Funktionalität Methode überschreiben

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

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

class C { 
    public static someMethod() {} 
} 

Wir tatsächlich versucht werden someMethod Funktionalität der statischen Methode zu ändern. Gibt es eine Möglichkeit, dieses Problem zu lösen, ohne die Anrufhierarchie zu ändern?

+0

Sie könnten Ihre Antwort in finden [Warum Java nicht überwiegende von statischen Methoden erlauben?] (Http://stackoverflow.com/q/2223386/1072229) –

Antwort

1

Es gibt keine Möglichkeit, eine static Methode zu überschreiben.

Das warum einer dieser Ansätze ist dem Aufruf statische Methoden bevorzugt wird:

  • ein anderes Objekt injizieren (Service), die die Funktionalität in einem nicht-statische Methode liefert und es durch das injizierte Objekt aufrufen
  • machen Sie die statische Methode eine dünne Hülle, die nur delegiert die Arbeit zu einem gewissen nicht-statisches Objekt, das konfiguriert werden kann (wie in slf4j des Loggers)
3

Sie können nicht nur Override ein static Methode. Meiner Meinung nach entfernen Sie static von der Methode someMethod(), dann erstellen Sie ein Objekt der Klasse C innerhalb der Klasse B. Dann rufe die Methode auf.

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

Die Klasse C in einer externen Bibliothek ist, Daher ist es nicht möglich, die Implementierung dort zu ändern. –