2016-03-21 3 views
2

Я написал этот метод:как передать `Класс <T>` `` Список <MyDevice> `?

public <T> T jsonToObject(String json, Class<T> klazz) { 
     ObjectMapper mapper = new ObjectMapper(); 
     T object = null; 
     try { 

      object = mapper.readValue(json, klazz); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return object; 
    } 

Я хочу назвать его:

List<Device> devicesList= jsonUtils.jsonToObject(response.getEntityInputStream(), new TypeLiteral<List<Device>.class); 

, что это правильный способ передать Class<T> из List<Device>?

ответ

4

Ну, если вы хотите назвать это с TypeLiteral (и это действительно так, чтобы захватить общий тип списка), ваш метод должен согласиться с TypeLiteral<T> в качестве аргумента, а не Class<T>.

И абонент должен использовать анонимный класс, чтобы правильно захватить тип:

jsonUtils.jsonToObject(response.getEntityInputStream(), 
         new TypeLiteral<List<Device>>() {}); 
+0

, но тогда, как я буду называть 'mapper.readValue (JSON, klazz)'? –

+1

Что такое картограф? Это экземпляр Jackson ObjectMapper? Если так, не используйте TypeLiteral, а TypeReference от Jackson, который выполняет ту же цель и работает одинаково. http://fasterxml.github.io/jackson-databind/javadoc/2.7/com/fasterxml/jackson/databind/ObjectMapper.html#readValue%28byte[],%20com.fasterxml.jackson.core.type.TypeReference%29 –

Смежные вопросы