#java #generics
#java #общие сведения
Вопрос:
Хотя мне сложно объяснить проблему с помощью правильной терминологии, я постараюсь продемонстрировать все, что в моих силах.
Я хочу создать метод, который генерирует новый TableView
со следующими параметрами:
private TableView<T extends MySuperClass> createTable(T subClass, String[] names, String[] varNames)
Когда я создаю TableColumn
s, мне нужно знать типы каждого столбца. Я подумал, может быть, что, обращаясь к каждому из names
get-методов, я мог бы использовать Type type = getMethod(methodName).getAnnotatedReturnType().getType()
для получения возвращаемого типа, а затем использовать это как тип, а затем использовать это следующим образом:
for(int i = 0; i < names.length; i ){
TableColumn<T,type> tableColumn1 = new TableColumn<>(names[i]);
}
но это не сработало.
Итак, есть ли способ использовать объект типа в качестве типа в универсальном объекте?
Редактировать
Я добавляю еще один пример, чтобы прояснить вопрос
Type type = ... //<---- What to put here?
ArrayList<type> someList = new ArrayList<>();
Возможно ли сделать что-то подобное? Если да, то Type
является ли это правильным классом / интерфейсом для использования?
Комментарии:
1. Можете ли вы привести пример, потому что мне не ясно, какой «тип» вы ожидаете / хотите получить.
2. Переменная ‘type’ может содержать строку, целое число и т.д. @Tom
3. И как вы
createTable
должны это понимать? Я понятия не имею, что вы имели в виду подType type = getMethod(methodName).getAnnotatedReturnType().getType()
. Понятно, что вы не знали, как достичь желаемого, это нормально, но каков был ваш общий подход там? И не будет ли дополнительный параметр с типом столбца самым простым решением здесь? У вас уже естьT
, поэтому вы также можете создать вторую универсальную переменную, например «c», затем использоватьClass<c> columnType
и затемTableColumn<T, C>
4. @Tom methodName — это просто имя GetMethod, например «getName». Затем, используя этот «Метод», я мог бы использовать «getAnnotatedReturnType()» для получения возвращаемого типа (например, String). Это был мой подход, но, как я уже сказал, это не сработало. Это была просто попытка. Извините, если мой вопрос немного неясен. Но спасибо вам за это предложение с классом<c> , я попробую это вместо.
5. @Tom ОК, спасибо. Я сделаю это!