Конвертирование объекта из .invoke в класс -- Java
---------------------------------------------Тема закрыта--------------------------------------------
Снова здравствуйте! Эта проблема почти прямо продолжает эту.
Проблема заключается в том что файл уже импортировался, класс вроде как тоже, метод с аргументами запускается, и:
newReturnObj = runMethod.invoke(newObjClass, self, gamescreen);
Этот метод возвращает мне Object из этого файла (Не обращайте внимания на imrort-ты и exends, так как мне кажется они ничего не меняют, потому что файл находиться в другой папке. Не знаю):
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.RandomXS128;
import com.badlogic.gdx.math.Vector2;
import com.my.javabots.game.returnClass;
public class test extends returnClass {
public test() {}
public returnClass Run(Cell self, gameScreen gamescreen) {
System.out.println("HELLO, IT WORKS!");
return new returnClass(self, gamescreen);
}
}
И этот объект, который возвращает этот файл не совсем то, что мне нужно было, хотя в нем есть нужные мне переменные в Debug режиме:
Также в Debug режиме:
То есть я так понимаю, они существуют, вот только Java это не знает, соответственно получить к ним доступ не получается (Без Debug-а):
Получается мне нужно либо конвертировать этот объект в нужный мне класс (Вот он):
package com.my.javabots.game;
import com.my.javabots.game.UI.gameScreen;
import com.my.javabots.game.Cell;
public class returnClass {
Cell self;
gameScreen gamescreen;
}
Либо получить доступ к переменным. Естественно если я попытаюсь сделать это по простому:
newReturnObj = runMethod.invoke(newObjClass, self, gamescreen);
newReturn = (returnClass) newReturnObj;
Я получаю ошибку:
class returnClass cannot be cast to class com.my.javabots.game.returnClass (returnClass is in unnamed module of loader java.net.URLClassLoader @6ef888f6; com.my.javabots.game.returnClass is in unnamed module of loader 'app')
Но мне же как-то надо либо конвертировать этот объект, либо сделать так, чтобы Java понимала что в этом объекте есть эти переменные, как иначе -- не знаю.
Заранее спасибо всем!
Ps. Кажется как-будто эта тема похожа, но как я понял -- не совсем.
Ответы (1 шт):
Боже как я это не заметил... Если вдруг у кого-то будет такая проблема с внешними файлами, возможно что JavaCompiler не перезаписывает .class файлы То есть я менял файл, а скомпилированный .class файл оставался старой версии. Он был примерно такой:
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.RandomXS128;
import com.badlogic.gdx.math.Vector2;
import com.my.javabots.game.Cell;
import com.my.javabots.game.UI.gameScreen;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
public class test extends botsController {
public test() {}
public returnClass Run(Cell self, gameScreen gamescreen) {
System.out.println("HELLO, IT WORKS!");
return new returnClass(self, gamescreen);
}
}
class returnClass {
Cell cell;
GameScreen gamescreen;
public returnClass(Cell cell, gameScrenn gamescreen) {
this.cell = cell;
this.gamescreen = gamescreen;
}
}
Соответственно использовался не тот returnClass который должен был, и компилятор считал их разными классами (Что очень логично) поэтому и возникала ошибка:
class returnClass cannot be cast to class com.my.javabots.game.returnClass (returnClass is in unnamed module of loader java.net.URLClassLoader @6ef888f6; com.my.javabots.game.returnClass is in unnamed module of loader 'app')
Потому что returnClass != com.my.javabots.game.returnClass в который я его пытался конвертировать, вручную удалив скомпилированный .class файл. И уже с новым кодом:
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.RandomXS128;
import com.badlogic.gdx.math.Vector2;
import com.my.javabots.game.returnClass;
import com.my.javabots.game.Cell;
import com.my.javabots.game.UI.gameScreen;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
public class test extends com.my.javabots.game.botsController {
public test() {}
public returnClass Run(Cell self, gameScreen gamescreen) {
System.out.println("HELLO, IT WORKS!");
return new returnClass(self, gamescreen);
}
}
Это даже вроде бы как начало работать! И да, обычная конвертация:
newReturnObj = runMethod.invoke(newObjClass, self, gamescreen);
newReturn = (returnClass) newReturnObj;
Тоже вроде как полностью исправно работает! Извините если я кого-то ввел в заблуждение.
Кратко:
Как я понял --JavaCompiler не заменяет файлы (Либо иногда лагает), их нужно удалять чтобы 100% могла компилироваться новая версия кода. Надеюсь что оно будет работать после компиляции программы .jar
Ps. Не знаю, может случился какой-то баг, но теперь он вроде заменяет файлы.. В чём проблема была..

