2016-01-29 3 views
0

Я хочу создать метод на Java, который: когда я передаю параметр любого типа класса, он создает новый Список этого типа, действуя как генерирование динамического списка, то с любым другим методом заполните этот список (это не имеет большого значения) и, наконец, верните этот список, заполненный элементами этого типа класса (из списка). Я хочу, чтобы достичь чего-то большеменьше этот пример:Создайте новый объект из заданного типа, переданного как параметр

public List<fooClass> returnResultsList(Class fooClass) { 
    List<fooClass> newList = new ArrayList<fooClass>(); 
    newList = fillWithResults(); // Pretty sure elements added here are fooClass type. 
    return (List<fooClass>) newList; 
} 

Я не знаю, если я должен использовать отражение. Я пытался сделать что-то вроде List<fooClass.class> .... Или List<instanceof(fooClass)> .... Или List<typeof(fooClass)> Или List<fooClass.newInstace()> без успеха и много ошибок компилятора :(


EDIT 1:
Метод fillWithResults() возвращает java.util.List объект, так что может быть применена к любому типу или классу. На самом деле, мне неважно, насколько этот список заполнен. Вопрос заключается в том, как создать новый объект класса, переданного как параметр.


EDIT 2:
я достиг чего-то вроде этого без ошибок компилятора, но я не уверен, если это работает:

public <T> List<T> returnResultsList(Class<T> fooClass) { 
    List<T> newList = new ArrayList<T>(); 
    newList = (List<T>) this.fillWithResults(); 
    // Do something else... 
    return newList; 
} 

Любая помощь или объяснения будут оценены ,

Заранее благодарен!

+0

Чтобы получить полный ответ, вам, вероятно, придется предоставить код для 'fillWithResults'. –

+1

Мог ли ваш вопрос на самом деле быть [проблема XY] (http://mywiki.wooledge.org/XyProblem), где вы спрашиваете «как мне исправить эту проблему с кодом», когда лучшим решением является использование другого подхода полностью? Может быть. Подумайте, расскажите нам общую проблему, которую вы пытаетесь решить, а не как пытаетесь ее решить. –

ответ

0

Для того, чтобы создать экземпляр класса из объекта класса, вы должны использовать отражение

fooClass.newInstance(); 
Constructor<?>[] constructors = fooClass.getConstructors(); 
Class<?>[]  parameterTypes = constructors[ 0 ].getParameterTypes(); 
constructors[0].newInstance(/*parameters*/); 

Если ваш просто делает основной конструктор, то это легко, если вы используете параметры, это становится очень сложный очень быстро.

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