У нас есть ситуация, когда мы используем какую-то библиотеку, и мы хотели бы настроить логику крошечного частного метода, используемого в библиотеке.К сожалению, библиотека плохо написана для расширения.
Итак, представьте себе, если у нас есть библиотека с классом ClassA
, подобная этой:
public class ClassA {
public String buildMessage(){
return "Hello, "+ buildSuffixString();
}
private String buildSuffixString(){
return "World!";
}
}
Класс ClassA
используется в библиотеке классом ClassB
.ClassB
используется в библиотеке ClassC
и так далее.ClassB
создает свою зависимость в конструкторе с кодом, подобным classA = new ClassA()
;(К сожалению).ClassC
создает свою зависимость в конструкторе с кодом, подобным classB = new ClassB()
;.И так далее.
Мы хотели бы заставить всех, кто использует метод buildMessage()
из ClassA
, получить Hello, Kitty!
сообщение вместо Hello, World!
(т.е. нам нужно заменить реализацию закрытого метода buildSuffixString()
нанаша собственная реализация).Есть ли способ изменить логику частного метода с помощью рефлексии или компилятора Java или чего-то еще?