2014-11-20 2 views
1

Функция toJson GSON принимает аргумент типа, который проверяет Type при отражении объекта. Это полезно для отображения объектов в коллекцию.Простой код для получения java.lang.reflect.Type

Однако, единственный способ, которым я могу найти, чтобы получить Типа через уродливый набор кодирование судорог:

//used for reflection only 
@SuppressWarnings("unused") 
private static final List<MyObject> EMPTY_MY_OBJECT = null; 
private static final Type MY_OBJECT_TYPE; 

static { 
    try { 
     MY_OBJECT_TYPE = MyClass.class.getDeclaredField("EMPTY_MY_OBJECT").getGenericType(); 
    } catch (Exception e) { 
     ... 
    } 
} 

private List<MyObject> readFromDisk() { 

    try { 
     String string = FileUtils.readFileToString(new File(JSON_FILE_NAME), null); 
     return new Gson().fromJson(string, MY_OBJECT_TYPE); 
    } catch (Exception e) { 
     ... 
    } 
} 

есть способ инициализации типа без привязки переменных внутреннего класса? Псевдокод будет выглядеть примерно так:

private static final Type MY_OBJECT_TYPE = TypeUtils.generate(List.class, MyObject.class); 
+1

Вы пробовали написать свой метод с помощью интерфейса, на который вы смотрите, и столкнуться с проблемой? – Krease

+0

@Chris Извините, я не понимаю ваш вопрос. – patstuart

+1

@patstuart javadoc для 'toJson' выглядит так, как будто они могут ответить на ваш вопрос. 'Тип typeOfSrc = new TypeToken <Список >() {}. GetType();' – Danny

ответ

3

Javadoc для toJson выглядит, чтобы ответить на ваш вопрос

typeOfSrc - Конкретный тип обобщенного СРК. Вы можете получить этот тип, используя класс TypeToken. Например, чтобы получить тип для коллекции, вы должны использовать:

Type typeOfSrc = new TypeToken<Collection<Foo>>(){}.getType(); 

Так что в вашем случае.

private static final Type MY_OBJECT_TYPE = new TypeToken<List<MyObject>>(){}.getType(); 
+0

Это сработало; Спасибо. – patstuart

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