您的位置:首页 > 编程语言 > Java开发

JAVA复习之泛型

2011-12-20 12:08 260 查看
常规用法:

1.定义泛型类时声明多个类型;

class MutiOverClass<T1,T2>

2.定义泛型时声明数组类型:

class ArrayClass<T>{
private T[] array;
//.....
}


注意,可以在使用泛型机制是声明数组,但是不可以使用泛型来建立数组实例;

例如,//private T[] array=new T[10];是不允许的。

高级用法:

1.限制泛型可用类型。

class LimitClass<T extends Anyclass>,即T只可以是Anyclass的子类,或者实现了Anyclass接口;

class LimitClass<T super Anyclass>, 即T只可以是Anyclass接口或者Anyclass的父类;

2.通配符。

泛型类型名<?extends List>

注意:(1)List与List<?>的区别,使用通配符声明的名称实例化的对象不能对其加入新的信息,只能获取或删除。

(2)

package test;
import java.util.*;

public class Test {

/**
* @param args
*/
public  double sum(List<?extends Object>list){
double result=0.0;
for(int i=0;i<list.size();i++){

Object n=list.get(i);
double values=((Number)n).doubleValue();
result+=values;
}
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test a=new Test();
List<Number> list=new ArrayList<Number>();
for(int i=0;i<10;i++)
list.add(i);
double result=a.sum(list);
System.out.println(result);
}

}


public class Test {

/**
* @param args
*/
public  double sum(List<Object>list){
double result=0.0;
for(int i=0;i<list.size();i++){

Object n=list.get(i);
double values=((Number)n).doubleValue();
result+=values;
}
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test a=new Test();
List<Number> list=new ArrayList<Number>();
for(int i=0;i<10;i++)
list.add(i);
double result=a.sum(list);
System.out.println(result);
}

}


注意对比上面两段代码,第二段代码是错误的,错误原因:The method sum(List<Object>) in the type Test is not applicable for the arguments (List<Number>)

虽然Number继承了Object但是List<Number>与List<Object>并没有继承关系,所以不存在所谓的向上转型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: