Java: Как проверить универсальные определения типа класса?

Попробуйте это.

List _events = [];
List _dates = [];
jsonParsed.keys.forEach((String key){
   _dates.add(key);
});
for(int i=0; i<_dates.length; i++){
  jsonParsed[_date[i]].forEach((event){
   final Event event = Event(
      title: jsonParsed['title'],
      nbLike: jsonParsed['nbLike'],

    );
    _events.add(event);
  });
}
5
задан 20 January 2009 в 12:32
поделиться

4 ответа

Вы не можете. Java универсальные типы "стирается" компилятором, т.е. HashMap<String, String> становится справедливым HashMap во времени выполнения. Посмотрите этот вопрос.

7
ответ дан 18 December 2019 в 07:32
поделиться

Я действительно не понимаю цели того, что Вы пытаетесь сделать. У меня есть чувство, что должно быть возможно проверить что во время компиляции путем тщательной разработки иерархии классов. Но без большего количества деталей о проблеме Вы пытаетесь решить, я не могу помочь Вам.

1
ответ дан 18 December 2019 в 07:32
поделиться

Действительно, стирание типа есть, но оно не применяется к переменным / полям - только к определениям классов, где параметры типа стираются и заменяются их верхними границами.

Это означает, что то, о чем вы просите, может быть достигнуто. Вот как вы можете проверить общие параметры первого параметра метода:

class Z
{
  public void f(List<String> lst) { }
}

...

Method m = Z.class.getMethod("f", List.class);
Type t = m.getGenericParameterTypes()[0];
if(t instanceof ParameterizedType) {
  ParameterizedType pt = (ParameterizedType) t;
  System.out.println("Generic params of first argument: " + Arrays.toString(pt.getActualTypeArguments()));
}    
12
ответ дан 18 December 2019 в 07:32
поделиться

Как уже отмечалось, во время выполнения вы не можете просматривать общую часть типа.

1
ответ дан 18 December 2019 в 07:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: