先看2段代码
protected <T> List<T> po2vo(Iterator<T> t_it) { List list = null; if(t_it!=null){ list = new ArrayList(); while(t_it.hasNext()){ Operator pOperator = (Operator)t_it.next(); Operator vOperator = OperatorPo2Vo.operatorPo2Vo (pOperator); list.add(vOperator); } } return list; }
protected <Operator> List<Operator> po2vo(Iterator<Operator> t_it) { List list = null;if(t_it!=null){ list = new ArrayList(); while(t_it.hasNext()){ Operator pOperator = (Operator)t_it.next(); Operator vOperator = OperatorPo2Vo.operatorPo2Vo(pOperator); list.add(vOperator); } } return list; }
第一段代码没报错,但有警告,第2段代码Myeclipse提示下面的错误
The method operatorPo2Vo(Operator) in the type OperatorPo2Vo is not applicable for the arguments (Operator)
意思很简单,OperatorPo2Vo类中参数为Operator的operatorPo2Vo方法对参数Operator不可用,我知道是由于泛型引起的,但不知道具体的原理,请教高手解释一下
[quote]我想你没把代码看仔细,Operator不是字符串,是个类[/quote]
如果是类的话,只能这样写
[code="java"]protected List po2vo(Iterator t_it) {
List list = null;
if(t_it!=null){
list = new ArrayList();
while(t_it.hasNext()){
Operator pOperator = (Operator)t_it.next();
Operator vOperator = OperatorPo2Vo.operatorPo2Vo(pOperator);
list.add(vOperator);
}
}
return list;
} [/code]
前面加表示泛型方法,<>里面的表示泛型参数。
你这里使用的是泛型方法,第二个方法中泛型参数命名不能是一个字符串,只能是一个字母,而且不能是小写的。
第一个方法有警告是因为使用集合类时,你没有加泛型参数:
例如:
List list = null
你如果用
List list = null
就没有警告