Вниз  Импортировать класс из корня
- 12.03.2014 / 18:36
Shuusaku
  Пользователь

Shuusaku 
Сейчас: Offline
Здравствуйте! Впервые пишу на этом форуме, надеюсь мне помогут. Есть класс ololo в пакете test. В корне(безымянном пакете, корень jar) есть класс main. Как вызвать из класса test класс main?
Когда пишу в ololo.test.class код import main; - пишет "error: '.' expected
import i;". Помогите!! Прошу не писать чтобы я поместил этот класс в другой пакет.. Нужно чтобы было именно так!
- 12.03.2014 / 18:41
Oak
  Пользователь

Oak 
Сейчас: Offline
Shuusaku, вопрос хороший.
Стандартными свойствами этого сделать нельзя и я настоятельно не рекомендую этого делать.
Решение может быть простым — перенести класс main в другой пакет.

Более сложное и опасное решение — использовать рефлексию.
Пример:
  1. Class mainClass= Class.forName("main");
  2. Method method= mainClass.getMethod("methodName", new Class[] { String.class });
  3.  
  4. String returned = method.invoke(mainClass.newInstance(),
  5.                                       new String[] {"value"}).toString();
О рефлексии более подробные материалы можно найти в поиске.

P.S. Такие вопросы следует задавать здесь http://annimon.com/forum/id547-12900
__________________
 Эль Презеденте

Изменено Oak (12.03 / 18:42) (всего 3 раза)
- 12.03.2014 / 18:42
samodelkin
  Пользователь

samodelkin 
Сейчас: Offline
Shuusaku, а без импорта пробывал?
- 12.03.2014 / 18:44
Shuusaku
  Пользователь

Shuusaku 
Сейчас: Offline
samodelkin, без импорта не видит такого класса :)
- 12.03.2014 / 18:45
samodelkin
  Пользователь

samodelkin 
Сейчас: Offline
Shuusaku, аа, тогда не знаю.
- 12.03.2014 / 18:47
Shuusaku
  Пользователь

Shuusaku 
Сейчас: Offline
Oak, понимаете, я не понимаю как, но другим удалось так сделать, а именно импортировать класс из корня. Например в игре "Need For Speed The Run" главный класс com.ea.nfs10.MonkeyApp.class
Остальные классы лежат в корне и вызываются из него без всякой рефлексии (я о ней знаю). Смотрите что показал JD-GUI на скрине
- 12.03.2014 / 18:49
Shuusaku
  Пользователь

Shuusaku 
Сейчас: Offline
вот скрин с игры


Прикрепленные файлы:
Снимок.jpg (30.87 кб.) Скачано 589 раз
- 12.03.2014 / 18:53
Oak
  Пользователь

Oak 
Сейчас: Offline
Shuusaku, скомпилированный байт-код этой игры был обработан обфускатором (им обрабатывают практически все коммерческие программы, чтобы не допустить раскрытия кода третьими лицами). Его действие видно хотя бы по названиям переменных (они непонятны и трудночитаемы человеком).
Обфускатор перепаковывает класс-файлы в пакет-по-умолчанию (который без имени), а из байт-кода уже можно загрузить класс из любого пакета (в том числе, из пакета-по-умолчанию).
Изначально же исходники были разложены по различным пакетам.

Собственно говоря, рефлексия в Java и является упрощённой версией того, как вызов классов/методов делается в байткоде.
__________________
 Эль Презеденте

Изменено Oak (12.03 / 18:55) (всего 2 раза)
- 12.03.2014 / 18:56
Shuusaku
  Пользователь

Shuusaku 
Сейчас: Offline
Oak, я так и думал.. спасибо за ответы.. рефлексия в J2ME нормально работает?
- 12.03.2014 / 18:58
DominaN
  Пользователь

DominaN 
Сейчас: Offline
Shuusaku, весьма урезана там она
Наверх  Всего сообщений: 23
Фильтровать сообщения
Поиск по теме
Файлы топика (2)