java 范型

类与方法都可以被范型化。类范型由类名后面跟上一个或几个三角括号包含的类型变量组成。

 

ArrayList<E>  代表的意思是ArrayList类里存放的数据类型,只能是E类型及其子类,如果不是,编译时会编译不通过。

 

public E get(int index) 代表的意义是该方法返回的类型是E类型,使用的时候可以直接当做E类型使用。

E是什么类型呢,E可以是任何类型。

 

例如:只需要存放String类型数据的ArrayList ,可以声明为:

List<String>  list = new ArrayList<String>();

 

 

 

package home;

 

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

 

/*

 * generic 范型的使用

 */

 

public class GenericTest {

 

public static void main(String[] args) {

 

ArrayList<String> array = new ArrayList<String>();

 

array.add("hello");

//array.add(1);    报错,因为这里已经声明了,array只能存放String,以及其子类类型

 

for(String a: array){

System.out.println(a);

}

 

ArrayList<Integer> array2 = new ArrayList<Integer>();

array2.add(1);

array2.add(40);

 

for(int a: array2){

System.out.println(a);

}

 

 

 

//使用多个范型  Map<String, Date>

Map<String, Date> map = new HashMap<String ,Date>();

map.put("time1", new Date());

map.put("time2", new Date());

map.put("time3", new Date());

 

for(String key : map.keySet()){

Date date = map.get(key);

System.out.printf("key: %1$s, value :%2$tF %2$sT%n",key ,date);

}

 

 

List <Date> datelist = new ArrayList<Date>();

List<Integer> intList = new ArrayList<Integer>();

 

datelist.add(new Date());

datelist.add(new Date());

 

intList.add(3);

intList.add(5);

 

 

numberList(intList);

dateList(datelist);

 

 

 

}

/*

* 范型通配符

* 通配符的不确定性,通过通配符只能用来进行类型安全检查,而不能用来声明具体的范型

* 范型允许使用通配符(?) ,?代表任何数据类型,使用List<?> list ,表示List里可以放任何数据类型,

* ?一般与extends 连用,表示指定类型以及其所有子类

* ?与super连用,表示指定类型以及指定类型的所有父类

* List <?> list = new ArrayList<?>();   //编译出错,因为通配符只能用来进行安全检查,这里是作为了声明

* List <? extends Number> list2 = new ArrayList<? extends Number>();

*/

 

 

 

//List <? extends Number> list  用来检查,list里面存放的数据类型必须是Number,以及其子类型

public static void  numberList(List <? extends Number> list){

for(Number num: list){

System.out.printf("输出数字:%1$s %n", num);

}

}

 

 

public static void dateList(List <? extends Date> list){

for(Date date: list){

System.out.printf("输出日期:%1$tF %1$tT%n", date);

}

}

 

 

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值