12.03.2014 / 18:36 | |
Shuusaku Пользователь Сейчас: Offline
Имя: Shuusaku Kouki Регистрация: 27.02.2014
| Здравствуйте! Впервые пишу на этом форуме, надеюсь мне помогут. Есть класс ololo в пакете test. В корне(безымянном пакете, корень jar) есть класс main. Как вызвать из класса test класс main? Когда пишу в ololo.test.class код import main; - пишет "error: '.' expected import i;". Помогите!! Прошу не писать чтобы я поместил этот класс в другой пакет.. Нужно чтобы было именно так!
|
12.03.2014 / 18:41 | |
Oak Пользователь Сейчас: Offline
Имя: Коля Откуда: Москва Регистрация: 02.06.2010
| Shuusaku, вопрос хороший. Стандартными свойствами этого сделать нельзя и я настоятельно не рекомендую этого делать. Решение может быть простым — перенести класс main в другой пакет. Более сложное и опасное решение — использовать рефлексию. Пример: Class mainClass= Class.forName("main");
Method method= mainClass.getMethod("methodName", new Class[] { String.class });
String returned = method.invoke(mainClass.newInstance(),
new String[] {"value"}).toString();
О рефлексии более подробные материалы можно найти в поиске. P.S. Такие вопросы следует задавать здесь http://annimon.com/forum/id547-12900 __________________
Эль Презеденте Изменено Oak (12.03 / 18:42) (всего 3 раза) |
12.03.2014 / 18:42 | |
samodelkin Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| Shuusaku, а без импорта пробывал?
|
12.03.2014 / 18:44 | |
Shuusaku Пользователь Сейчас: Offline
Имя: Shuusaku Kouki Регистрация: 27.02.2014
| samodelkin, без импорта не видит такого класса |
12.03.2014 / 18:45 | |
samodelkin Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| Shuusaku, аа, тогда не знаю.
|
12.03.2014 / 18:47 | |
Shuusaku Пользователь Сейчас: Offline
Имя: Shuusaku Kouki Регистрация: 27.02.2014
| Oak, понимаете, я не понимаю как, но другим удалось так сделать, а именно импортировать класс из корня. Например в игре "Need For Speed The Run" главный класс com.ea.nfs10.MonkeyApp.class Остальные классы лежат в корне и вызываются из него без всякой рефлексии (я о ней знаю). Смотрите что показал JD-GUI на скрине
|
12.03.2014 / 18:49 | |
Shuusaku Пользователь Сейчас: Offline
Имя: Shuusaku Kouki Регистрация: 27.02.2014
| вот скрин с игры
Прикрепленные файлы: Снимок.jpg (30.87 кб.) Скачано 580 раз |
12.03.2014 / 18:53 | |
Oak Пользователь Сейчас: Offline
Имя: Коля Откуда: Москва Регистрация: 02.06.2010
| Shuusaku, скомпилированный байт-код этой игры был обработан обфускатором (им обрабатывают практически все коммерческие программы, чтобы не допустить раскрытия кода третьими лицами). Его действие видно хотя бы по названиям переменных (они непонятны и трудночитаемы человеком). Обфускатор перепаковывает класс-файлы в пакет-по-умолчанию (который без имени), а из байт-кода уже можно загрузить класс из любого пакета (в том числе, из пакета-по-умолчанию). Изначально же исходники были разложены по различным пакетам.
Собственно говоря, рефлексия в Java и является упрощённой версией того, как вызов классов/методов делается в байткоде.
__________________
Эль Презеденте Изменено Oak (12.03 / 18:55) (всего 2 раза) |
12.03.2014 / 18:56 | |
Shuusaku Пользователь Сейчас: Offline
Имя: Shuusaku Kouki Регистрация: 27.02.2014
| Oak, я так и думал.. спасибо за ответы.. рефлексия в J2ME нормально работает?
|
12.03.2014 / 18:58 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| Shuusaku, весьма урезана там она
|