通用方法的返回类型也必须是通用的吗?

问题描述 投票:0回答:1

有人告诉我创建一个结合两个通用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. 在主函数原型中,每次要在函数中使用泛型类型时,都需要将generic声明添加为<T>
  3. 我已经创建了一个通用变量,该变量将具有该函数的返回数据,到目前为止,我知道它将以List<String>的形式返回。如何将变量声明为List<T>List<String>,这是什么约定? ?
  4. 为什么编译器要我将其返回类型已经为combineArrayList()List<T>的类型强制转换为List<T>

谢谢!

java arraylist generic-list
1个回答
0
投票
  1. 您正在从静态上下文中调用该函数。因此,它必须是静态的或创建类的对象。
  2. 由于在此处指定通用类型,因此您的代码List<T> returnedList = new ArrayList<T>();中的这一行迫使您这样做。泛型不在运行时评估。
  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);

  }
  1. 编译器不知道您的combineArrayList()函数将返回什么,您想将其分配给List<T>
© www.soinside.com 2019 - 2024. All rights reserved.