关于泛型的问题

先看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
就没有警告