У меня есть проект java, который я хочу создать, который будет построен поверх некоторых API-интерфейсов поставщиков. API-интерфейсы подключаются к серверам, на которых выполняется указанное программное обеспечение поставщика, и выполняют различные действия.Можно ли переключать версии класса во время выполнения с Java?
У меня есть 2 разных версии серверов, поддерживаемых двумя различными версиями API. Любые изменения API API выполняются только во внутренней реализации. И.Е. Классы, интерфейсы, методы и т. Д., Доступные мне в старой версии, существуют в более новой версии. Поэтому код, который я пишу, должен компилироваться и запускаться с любой версией API. В API, представленном серверам, используется номер версии, когда используется API для подключения, что не позволяет использовать другой API версии на этом конкретном сервере.
Есть ли способ переключить JAR-файлы на лету во время выполнения? (что-то вроде c/C++ DLL ??)
Если переключение версий API во время выполнения невозможно, то какой из самых элегантных способов справиться с этой проблемой. Создайте код 2x (по одному для каждой версии api)?
Надеюсь, что у меня что-то не хватает, но подход 2 не кажется идеальным. Вот более конкретный пример:
package org.myhypotheticalwrapper.analyzer;
import org.myhypothetical.worker;
import org.myhypothetical.comparator;
public class Analyzer {
Worker w1 = new Worker();
Worker w2 = new Worker();
Comparator c = new Comparator(w1.connectAndDoStuff(),w2.connectAndDoStuff());
c.generateReport();
}
Это моя дилемма. Я хочу, чтобы w1 был построен со старым API и w2 был создан с новым API, чтобы они могли подключаться к соответствующим серверам. Кроме API, они сидят сверху, они одинаковы (идентичный код). Должен ли я создавать два уникально названных типа класса для W1 и W2, даже если их код идентичен, просто для размещения разных версий API? Похоже, что это может стать очень громоздким, если бы у меня было много версий API, с которыми я хотел бы взаимодействовать.
Любые предложения и комментарии очень ценятся.
-new парень
Это справедливо только в том случае, если у вас есть два файла jar, на которые ссылается один и тот же загрузчик классов. Если вы используете один и тот же загрузчик классов, тогда будет использоваться один набор классов, а другой - нет. Возможно, однако, загрузить два класса с одним и тем же именем и одним именем в одной JVM. Они просто должны быть загружены разными загрузчиками классов. –
Интересно, у вас есть ссылка на хороший прочтение? Google провалил меня :( – amischiefr