Тип возвращаемого значения метода c должен быть также c? - PullRequest
0 голосов
/ 29 апреля 2020

Мне сказали создать метод, объединяющий два родовых c ArrayList. Вот код, и у меня есть несколько вопросов:

 public static <T> List<T> combineArrayList(List<T> list_Array1, List<T> list_Array2){
    List<T> returnList = new ArrayList<T>();
    int i;
    for(i = 0;i< list_Array1.size();i++){
        returnList.add(list_Array1.get(i));
    }
    for(i = 0;i< list_Array2.size();i++){
        returnList.add(list_Array2.get(i));
    }
    return returnList;
}

public static  <T> void main(String[] args) {
    // Create a list and add some colors to the list
    List<String> list_Strings = new ArrayList<String>();
    List<String> list_Strings2 = new ArrayList<String>();
    List<T> returnedList = new ArrayList<T>();
    list_Strings.add("Red");
    list_Strings2.add("yellow");

    returnedList = (List<T>) combineArrayList(list_Strings,list_Strings2);
    // Print the list
    System.out.println(returnedList);

}
  1. Я действительно не понимаю, почему компилятор хочет добавить static к функции combineArray()
  2. In прототип основной функции, мне нужно было добавлять объявление generic как <T> каждый раз, когда я хочу использовать тип Generi c в функции?
  3. Я создал переменную Generi c который будет иметь возвращаемые данные из функции, я знаю, что она будет возвращена как List<String> как мне объявить переменную как List<T> или List<String>, каково соглашение?
  4. Почему компилятор хочет, чтобы я приводил тип combineArrayList() к List<T>, тип возврата которого уже равен List<T>?

Спасибо!

1 Ответ

1 голос
/ 29 апреля 2020
  1. Вы вызываете функцию из общего состояния c. Таким образом, это должно быть stati c или создание объекта класса.
  2. Вы вынуждены сделать это из-за этой строки в вашем коде List<T> returnedList = new ArrayList<T>();, так как вы задаете здесь тип generi c. Обобщения не оцениваются во время выполнения.
  3. Вы можете сделать что-то вроде этого,
public static void main(String[] args) {
    // Create a list and add some colors to the list
    List<String> list_Strings = new ArrayList<>();
    List<String> list_Strings2 = new ArrayList<>();
    list_Strings.add("Red");
    list_Strings2.add("yellow");
    List<String> returnedList = combineArrayList(list_Strings, list_Strings2);
    // Print the list
    System.out.println(returnedList);

  }
Компилятор не знает, что будет возвращено вашей функцией combineArrayList(), и вы хотите присвоить его List<T>.
...