2017-01-24 7 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

Вы не можете просто Overridestatic метод. По-моему, удалите static по методу someMethod(), а затем создайте объект класса C внутри класса B. Затем вызовите метод.

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 находится во внешнем библиотеке, поэтому его невозможно изменить. –