泛型方法 return 类型也必须是泛型?

generic method return type must be also generic?

我被告知要创建一个结合两个通用 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. 我不太明白为什么编译器要在函数combineArray()
  2. 中添加static
  3. 在main函数原型中,每次要在函数中使用Generic类型时,我都需要添加generic声明为<T>
  4. 我已经创建了一个通用变量,它将包含来自函数的 return 数据,到目前为止我知道它将是 return 作为 List<String> 我应该如何声明变量作为 List<T>List<String>,约定是什么?
  5. 为什么编译器要我将 combineArrayList() 的类型转换为 List<T> 而他的 return 类型已经是 List<T>

谢谢!

  1. 您正在从静态上下文中调用该函数。所以它需要是静态的或创建 class.
  2. 的对象
  3. 由于代码中的这一行,您被迫这样做 List<T> returnedList = new ArrayList<T>(); 因为您在此处指定了通用类型。泛型不会在运行时求值。
  4. 你可以这样做,
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);

  }
  1. 编译器不知道您的 combineArrayList() 函数将返回什么,而您想将其分配给 List<T>