Как изменить ссылку на объект внутри другого объекта в Scala? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть ситуация, когда некоторые объекты приходят из внешнего Jar. object X используется из других object, например:

object X {
    def foo() = ....
... more methods to follow
}

object A {
    def bar() = X.foo()
    ...few more methods using X
}

object B {
    def baz() = X.baz()
     ...few more methods using X
}

...other objects using X...

Все эти объекты принадлежат одному и тому же пакету Jar, и мне нужно использовать классы A, B, et c но с другой ссылкой, чем X (будет моим local X). Есть ли способ как-то заменить X внутри моего проекта, который использует банку, определенную таким образом?

1 Ответ

1 голос
/ 22 апреля 2020

Короче, нет.

Короче говоря, это возможно, но это скорее взлом, а не правильное решение.

Вы можете переопределить X внутри того же имени пакета, что и исходный X, а затем полагаться на порядок jar загрузчика классов для загрузки вашего X первым.

Правильное решение - это редизайн вашей программы, позволяющий «внедрить» реализации. Например, таким образом

trait X {
    def foo() = ....
... more methods to follow
}

object X extends X
object Y extends X

object A {
    def bar(x: X) = x.foo()
    ...few more methods using X
}

object B {
    def baz(x: X) = x.baz()
     ...few more methods using X
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...