Рефлексия
Возможно ли получить список классов программно, получить имена полей классов, имена методов и их параметры?
Есть желание сделать для Unity генератор объектно-ориентированных оберток необходимых классов... Подскажите куда копать? |
Ответ: Рефлексия
В Java есть рефлекция, вот гугл выдал первую ссылку, вроди то что тебе нужно:
http://mobile.tutsplus.com/tutorials...va-reflection/ По поводу обёртнок, можно задуматься о разработке некоего API для игр, если собираешься использовать в более чем одном проекта, используя NDK, на C++. Если используется MonoDroid, то он имеет .Net рефлекцию (аналогичная C# .Net) |
Ответ: Рефлексия
Мне необходимо под Unity иметь доступ к нужным классам Java/Android с использованием C# объектов. Лень каждый раз вспоминать аргументы функций для вызова методом
PHP код:
Это сэкономит кучу времени. Пример такого класса: PHP код:
PHP код:
|
Ответ: Рефлексия
Воу... Это будет медленно же, если везде заменить это дело таким образом и вызывать в динамике.
Думаю можно было бы реализовать что-то более шустрое, хз как но вот пример как бы я реализовал, если бы компилил под разные платформы. Код:
#define JAVA Код:
var valueString = Platform.String.ValueOf(10.0f); Тут используется define чтобы определить платформу, в Unity есть даже для этого уже стандартные дефайны. По мне так удобно в юзабилити, хотя зависит от тебя. Тут ещё нужно подумать над разными типами данных, т.к. delegate'ы нельзя overload'ить. Но в пользовании у тебя будет одна функция, на разные платформы. Думаю это очень сократит время в разработки игры сразу с мультиплатформенным кодом. Но, это требует создания таких вот делегатов для этих самых функций.. Готовых не видел, и думаю будет весьма сложно это как-то автоматизировать, т.к. методы все разные, по разному используются.. UPD: Можно ещё кешировать AndroidJavaObject, т.к. он используется для доступа к статическим функциям. Для этого можно сделать статичный менеджер с хешь таблицей для доступа к объекту по имени, будет типо такого: ObjectManager.CallStatic("string", "valueOf", number); Заместо двух строк. При этом прописать в аттрибутах самого Accessor'а все нужные данные, тип объекта, путь к классу. Получается что менеджер кеширует это дело при включении (прбежиться по акксессорам, и создаст яваобъекты), далее в теле будет проще это вызывать. Хотя имхо, это не улучшит сильно ситуацию, единственное что это кеширует яваобъект, в остальном лишь ухудшит. |
Ответ: Рефлексия
Пример который я привел не имеет никакой практической ценности и меня не интересует быстродействие разовых методов. Все классы Android платформы будут использоваться несколько раз в процессе всей работы приложения.
То что я не не сделал в примере статический конструктор для класса, в котором бы создал экземпляр для вызова статических методов - не хотел нагружать кодом. Классы Android платформы будут применяться только для проектов под эту платформу. Поэтому никаких платформо-зависимых компиляций не будет. |
Часовой пояс GMT +4, время: 19:21. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot