LINUX.ORG.RU

опять ява, Как получить Type по имени параметризованного класса.


0

0

Вопрос в сабже. Например есть строка:

String typeName = "HashMap<String, int[]>"
если бы это был обычный класс, то тип можно было бы получить
Type = Class.forName(typeName, false, ClassLoader.getSystemClassLoader());
Но для параметризованных типов так не подходит, как вариант создатели gson используют свою имплементацию ParametrizedType, но чтобы создать сей объект нужно распарсить имя типа и для каждого класса создать Type и инстанцировать ParametrizedType полученным. Однако парсинг становится нетривиальным если тип параметризуется другим параметризованнм типом:
HashMap<String, List<int>>
, есть ли готовые решения, или опять стоить велосипед?

ps. куда смотрят создатели жабы, рекурсивных регекспов у них нет, тип создать через жопу…

★★☆

> есть ли готовые решения, или опять стоить велосипед?

antlr :)

> ps. куда смотрят создатели жабы, рекурсивных регекспов у них нет, тип создать через жопу…


хм, а у кого есть рекурсивные регекспы?

gaa ★★
()

Заюзай компилатор - это всего навсего джарчик из JDK, AFAIK без зависимостей.

Генеришь класс из шаблона вида 

class BoZo${insert_timestamp_here} {
  public static Object createObject() {
    return new ${type}();
  }
};

подставляешь в ${type} HashMap<String, List<int>>, натравливаешь на класс компилятор, получаешь .class файл, грузишь его класслодером,
 вызываешь createObject(). Можно это дело хешировать чтобы не компилировать попусту.

ЗЫ: Щютко.

Absurd ★★★
()
Ответ на: комментарий от wfrr

>Зачем два раза писать "Шутка" ?

Чтобы не было претензий - до некоторых с одного раза может и не дойти.

Absurd ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.