泛型方法 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);
}
- 我不太明白为什么编译器要在函数
combineArray()
中添加static
- 在main函数原型中,每次要在函数中使用Generic类型时,我都需要添加
generic
声明为<T>
?
- 我已经创建了一个通用变量,它将包含来自函数的 return 数据,到目前为止我知道它将是 return 作为
List<String>
我应该如何声明变量作为 List<T>
或 List<String>
,约定是什么?
- 为什么编译器要我将
combineArrayList()
的类型转换为 List<T>
而他的 return 类型已经是 List<T>
?
谢谢!
- 您正在从静态上下文中调用该函数。所以它需要是静态的或创建 class.
的对象
- 由于代码中的这一行,您被迫这样做
List<T> returnedList = new ArrayList<T>();
因为您在此处指定了通用类型。泛型不会在运行时求值。
- 你可以这样做,
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>
。
我被告知要创建一个结合两个通用 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);
}
- 我不太明白为什么编译器要在函数
combineArray()
中添加 - 在main函数原型中,每次要在函数中使用Generic类型时,我都需要添加
generic
声明为<T>
? - 我已经创建了一个通用变量,它将包含来自函数的 return 数据,到目前为止我知道它将是 return 作为
List<String>
我应该如何声明变量作为List<T>
或List<String>
,约定是什么? - 为什么编译器要我将
combineArrayList()
的类型转换为List<T>
而他的 return 类型已经是List<T>
?
static
谢谢!
- 您正在从静态上下文中调用该函数。所以它需要是静态的或创建 class. 的对象
- 由于代码中的这一行,您被迫这样做
List<T> returnedList = new ArrayList<T>();
因为您在此处指定了通用类型。泛型不会在运行时求值。 - 你可以这样做,
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>
。