JAVA复习之泛型

常规用法:

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>并没有继承关系,所以不存在所谓的向上转型。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值