Как использовать переменную в качестве типа при объявлении универсального объекта в Java

#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 ОК, спасибо. Я сделаю это!