Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Java Class<?> Создание массива

41K
16 июня 2013 года
m-alexander
16 / / 20.01.2009
Начал изучать Java и при решении одной задачи возник вопрос:
если как параметр передать Class<?> (например, MyClass.class), можно ли в функции создать ArrayList с элементами этого типа?
276
26 июня 2013 года
Rebbit
1.1K / / 01.08.2005
Можно
 
Код:
<T> List<T> createList(Class<T> clazz) {
    return new ArrayList<T>();
}
Если есть соответствующий конструктор то можно и наполнить.
 
Код:
<T> List<T> createList(Class<T> clazz) throws InstantiationException, IllegalAccessException {
    ArrayList<T> arrayList = new ArrayList<T>();
    arrayList.add(clazz.newInstance());
    return arrayList;
}
Только следует помнить что на самом деле ArrayList всегда содержит под капотом масив простых объектов. Все остальное - обман компиляции.
Тоесть на самом деле скомпилируется во чтото типа
 
Код:
<T> List<T> createList(Class<T> clazz) throws InstantiationException, IllegalAccessException {
    ArrayList arrayList = new ArrayList();
    arrayList.add(clazz.newInstance());
    return (List<T>) arrayList;
}
А если быть поточнее то каст будет в момент вызова метода. А возможно и вообще в момент доставания елемента из листа.

 
Код:
List createList(Class<T> clazz) throws InstantiationException, IllegalAccessException {
    ArrayList arrayList = new ArrayList();
    arrayList.add(clazz.newInstance());
    return arrayList;
}

List list = createList(MyClass.class);
MyClass instance = (MyClass) list.get(0);

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог