我有点困惑与下面的代码。问题是代码看起来与列表< T>具有与T相同的类型。 考虑方法makeList接收类型DTOInt的参数< T>并返回列表< T>(列表T)。 类DTO执行“T getData()方法” DTOInt < T>的,所以我们必须DTOInt接口具有一般定义t内是返回类型getData()方法的。铸造普通的T列出<T>
所以,内部makeList方法我做方法的getData()返回的对象(其是T形)的明显铸造成列表< T>。 它编译和运行良好。
关于编制了明确的 - 有一个明显的铸件,但是当它运行怎么不失败,抛出ClassCastException上铸造线在makeList()方法?
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()));
}
}
谢谢ignaZ! – Nemo 2013-04-28 11:48:05