У меня есть файл .jar, который используется программой, для которой я хочу написать расширение. Для одного из моих новых методов требуется пользовательский объект из этой банки. Если я импортирую этот пользовательский класс, я получаю сообщение об ошибке, потому что в eclipse импортированный класс и требуемый класс кажутся разными, даже если они имеют одно и то же имя.
Можно ли использовать объект из другого проекта?
Я не могу импортировать банку, потому что это расширение. Так что его можно скачать и использовать. Я просто хочу расширить это расширение, но не хочу менять само расширение. Я пытался преобразовать объект, но получаю сообщение об ошибке, что его нельзя преобразовать.
Это звучит как проблема пути к классам. Скорее всего, исходное расширение находится в пути к классам и снова является частью вашего расширения расширения. Чтобы JVM считала класс одинаковым, он должен находиться в одном пакете, иметь одно и то же имя а также и быть загруженным одним и тем же загрузчиком классов. Таким образом, класс, загруженный из вашего расширения расширения .jar, определенно считается отличным от любого класса с тем же именем, загруженного из исходного расширения .jar другим загрузчиком классов, даже если они на самом деле побитно идентичны.
Это именно то, о чем я просил. Так неужели нет другого пути? Можно ли преобразовать объект «внешнего класса» в объект «внутреннего класса»?
Нет, это невозможно. Во-первых, потому что для JVM эти два (идентичных) класса не имеют ничего общего, кроме java.lang.Object
как корневого предка, а во-вторых, потому что ни одна часть кода Java не может (статически) ссылаться на классы обе, как это было бы необходимо для приведения от одного типа к другой. Единственный способ решить эту проблему — иметь только одну копию файла класса в пути к классам. Вы можете попробовать упаковать/развернуть свое расширение без классов других расширений; если вам повезет, ваш код во время выполнения будет ссылаться на классы, уже развернутые в другом расширении, и все в порядке.
Ваш вопрос очень широк, поэтому я боюсь, что нет никаких шансов получить разумный ответ. Если вы хотите написать расширение для RapidMiner, ознакомьтесь с онлайн-руководством здесь: docs.rapidminer.com/latest/developers/extensions или ознакомьтесь с подробными вопросами и ответами других разработчиков и пользователей в сообществе пользователей: community.rapidminer.com.