您好我试图获取泛型类型的ArrayList来推断(实例化?)一个实际类型,但Java似乎打算将我的泛型类型设置为最常用的类型 - 对象。
import java.util.ArrayList;
public class test {
public static <T,U> void tryInstantialGenericType(ArrayList<T> tArray, ArrayList<U> uArray) {
for (T tObject: tArray) {
if (tObject != null) {
uArray.add((U) tObject);
} // cast type T elements in a to type U, then add to uArray.
}
System.out.println(uArray);
}
public static void main(String[] args) {
ArrayList na=new ArrayList<>();
na.add(23.56);
na.add(12.456);
ArrayList<String> as=new ArrayList<>();
as.add("dfty");
tryInstantialGenericType(na,as);
}
}
这里的想法是双打可以转换为字符串,但字符串不能被转换为双打。因此,通过交换na和as,应该可以在成功运行和某种错误,编译时或运行时之间进行替换。 但事实并非如此。 相反,在这两种情况下,参数ArrayLists a&amp;如果不推断它们是字符串或双字母,则它们被推断为某种通用的所有ArrayLists,能够接受任何对象。 它为什么这样做?我认为泛型类型应该推断出特定的类型是错误的吗?