Как использовать пользовательский объект из недоступного .jar

У меня есть файл .jar, который используется программой, для которой я хочу написать расширение. Для одного из моих новых методов требуется пользовательский объект из этой банки. Если я импортирую этот пользовательский класс, я получаю сообщение об ошибке, потому что в eclipse импортированный класс и требуемый класс кажутся разными, даже если они имеют одно и то же имя.

Можно ли использовать объект из другого проекта?

Я не могу импортировать банку, потому что это расширение. Так что его можно скачать и использовать. Я просто хочу расширить это расширение, но не хочу менять само расширение. Я пытался преобразовать объект, но получаю сообщение об ошибке, что его нельзя преобразовать.

Ваш вопрос очень широк, поэтому я боюсь, что нет никаких шансов получить разумный ответ. Если вы хотите написать расширение для RapidMiner, ознакомьтесь с онлайн-руководством здесь: docs.rapidminer.com/latest/developers/extensions или ознакомьтесь с подробными вопросами и ответами других разработчиков и пользователей в сообществе пользователей: community.rapidminer.com.

David 12.06.2019 14:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это звучит как проблема пути к классам. Скорее всего, исходное расширение находится в пути к классам и снова является частью вашего расширения расширения. Чтобы JVM считала класс одинаковым, он должен находиться в одном пакете, иметь одно и то же имя а также и быть загруженным одним и тем же загрузчиком классов. Таким образом, класс, загруженный из вашего расширения расширения .jar, определенно считается отличным от любого класса с тем же именем, загруженного из исходного расширения .jar другим загрузчиком классов, даже если они на самом деле побитно идентичны.

Это именно то, о чем я просил. Так неужели нет другого пути? Можно ли преобразовать объект «внешнего класса» в объект «внутреннего класса»?

Alex 13.06.2019 01:06

Нет, это невозможно. Во-первых, потому что для JVM эти два (идентичных) класса не имеют ничего общего, кроме java.lang.Object как корневого предка, а во-вторых, потому что ни одна часть кода Java не может (статически) ссылаться на классы обе, как это было бы необходимо для приведения от одного типа к другой. Единственный способ решить эту проблему — иметь только одну копию файла класса в пути к классам. Вы можете попробовать упаковать/развернуть свое расширение без классов других расширений; если вам повезет, ваш код во время выполнения будет ссылаться на классы, уже развернутые в другом расширении, и все в порядке.

JimmyB 14.06.2019 12:36

Другие вопросы по теме