泛型

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

表示该容器只能存储字符串类型的数据

泛型的好处:
1.将运行时的异常提前至编译时
2.避免了无谓的强制类型转换

泛型在集合中的常见应用:
ArrayList list=new ArrayList();
ArrayList list=new ArrayList();
ArrayList list=new ArrayList();
注意:
1.泛型没有多态的概念,左右两边数据类型必须一致,或者只写一边的泛型类型,推荐使用两边泛型类型
2.在泛型中,不能使用基本数据类型,如果要使用基本数据类型,那么久使用基本数据类型对应的包装类型

基本数据类型包装类型
byteByte
shortShort
intInteger
longLong
doubleDouble
floatFloat
booleanBoolean
charCharacter

自定义泛型:一个数据类型的占位符或是一个数据类型的变量

1.方法上自定义泛型:
修饰符 <声明自定义泛型>返回值类型 函数名(使用自定义泛型…){

}
方法泛型要注意的事项:
(1).在方法上自定义泛型,这个自定义泛型的具体数据类型是在调用该方法的时候传入实参时确定具体的数据类型
(2).自定义泛型只要符合标识符的命名规则即可,一般习惯使用一个大写字母表示(T 、E)

2.泛型类:
class 类名<声明自定义泛型>{

}
泛型类要注意的事项:
1.在类上自定义泛型的具体数据类型是在使用该类创建对象时确定的
2.如果一个类在类上已经声明了自定义泛型,如果使用该类创建对象的时候没有指定泛型的具体数据类型,那么默认为Object类型
3.在类上自定义泛型,不能作用于静态方法,如果静态方法需要使用自定义泛型,那么需要在方法上自己声明使用

定义一个数组工具类:

class MyArray<T>{
 //数组翻转
 public void reserve(T[] arr){
  for(int startIndex=0,endIndex=arr.length-1;startIndex<endIndex;startIndex++,endIndex--){
   T temp=arr[startIndex];
   arr[startIndex]=arr[endIndex];
   arr[endIndex]=temp;
  }
 }
 public String toString(T[] arr) {
  StringBuffer sb=new StringBuffer();
  for(int i=0;i<arr.length;i++){
   if(i==0){
    sb.append("["+arr[i]+"]");
   }else if(i==arr.length-1){
    sb.append(arr[i]+"]");
   }else{
    sb.append(arr[i]+",");
   }
   
  }
  return sb.toString();
 }
}

泛型接口:
interface 接口<声明自定义泛型>{

}
泛型接口要注意的事项:
1.接口上自定义的泛型的具体数据类型是在实现一个接口时指定的
2.在接口上自定义泛型,如果在实现类上没有指定具体的数据类型,那么默认为Object类型
3.如果需要在创建接口实现类对象时才指定接口自定义放泛型,那么需要以下格式:
class 类名 implements 接口

泛型的上下限:
?super Integer:只能存储Integer或者Integer父类类型的数据,泛型的下限
?entends Number:只能存储Number或者Number子类类型的数据,泛型的上限

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值