我对下面的代码有点困惑。问题是代码看起来 List<T> 与 T 具有相同的类型。考虑到方法makeList接收 DTOInt<T> 类型的参数并返回 List<T>(T 列表)。类 DTO 实现了 DTOInt<T> 的“T getData() 方法”,因此我们有 DTOInt 接口具有通用定义 T,它是 getData() 方法的返回类型。
因此,在makeList方法内部,我将方法getData()返回的对象(T 类型)明显转换为 List < T>。它编译和运行良好。
关于编译它很清楚 - 有一个明显的转换,但是当它运行时它不会在 makeList() 方法的转换线上出现 ClassCastException 失败?
interface DTOInt<T>{
T getData();
}
class DTO implements DTOInt<List<List<String[]>>>{
public List<List<String[]>> getData() {
String[] arr = {"1.1","1.2","1.3"};
String[] arr1 = {"2.1","2.2","2.3"};
List<String[]> l = new ArrayList<String[]>();
l.add(arr);
l.add(arr1);
List<List<String[]>> data = new ArrayList<List<String[]>> ();
data.add(l);
return data;
}
}
public class Test {
static <T> List<T> makeList(DTOInt<T> inp){
T data = inp.getData();
List<T> list = (List<T>) data;
return list;
}
public static void main(String[] args) {
System.out.println(makeList(new DTO()));
}
}