java日常学习:泛型
来源:互联网 发布:ecshop sql注入漏洞 编辑:程序博客网 时间:2024/06/05 09:51
java代码块
泛型
泛型是jdk1.5出现的新特性。
泛型的好处:
1. 可以把运行时出现的问题提前至编译时。
2. 避免了无谓的强制类型转换。
判断一下那种写法是正确的:
ArrayList list = new ArrayList(); true
ArrayList<Object> list = new ArrayList<String>(); falseArrayList<String> list = new ArrayList<Object>(); false
// 为了新老系统的兼用性
ArrayList list = new ArrayList(); true
ArrayList list = new ArrayList(); true
使用泛型要注意的事项:
1. 泛型中没有多态的概念,左右两边的数据类型必须要一致,或者是只写一边的泛型。
推荐使用: 两边都写上同样数据类型的泛型。
自定义泛型:自定义泛型可以理解为是一个数据类型的变量或者是一个数据类型的占位符。
函数自定义泛型的格式:
修饰符 <声明自定义泛型> 返回值类型 函数名(形参列表 ...){}
函数自定义泛型要注意的细节:
1. 函数上自定义泛型的具体数据类型是在调用该函数的时候,传递实参数据的时候确定具体的数据类型 的。
2. 自定义泛型使用的标识符可以自定义的,只要符合标识符的命名规则即可。但是一般自定义泛型使用的标识符都是单个字母而已。
泛型中是不能使用基本数据类型数据的,如果需要使用基本数据类型数据,那么就要使用基本数据类型对应 的包装类型
int -----> Integerfloat---->Floatdouble --- Double char -----> Characterboolean ---- Booleanbyte-----Byteshort ---Shortlong ----- Long
泛型类要注意的事项:
1. 类上声明的自定义泛型的具体数据类型是在使用该类创建对象 的时候确定的。
2. 如果一个类已经声明了自定义泛型,该类在创建对象的时候没有指定自定义泛型的具体数据类型,那么默认则为Object类型。
3. 静态的方法不能使用类上声明的自定义泛型,如果需要使用自定义泛型只能在自己方法上声明。
泛型接口:
泛型接口的定义格式:
interface 接口名<声明自定义的泛型>{}
泛型接口要注意的细节:
1. 接口上自定义泛型的具体数据类型是在实现该接口的时候确定 的。
2. 如果一个接口已经自定义了泛型,在实现该接口的时候没有指定自定义泛型的具体数据类型,那么默认为Object类型。
泛型的上下限:
需求1: 定义一个方法可以接受任意类型的集合对象, 接收的集合对象只能存储Integer以及Integer父类类型的数据。
需求2: 定义一个方法可以接受任意类型的集合对象, 接收的集合对象只能存储Number或者Number子类类型的数据。
泛型的通配符: ?
? super Integer 泛型的下限 只能用于Integer或者是Integer的父类类型数据 ? extends Number 泛型的上限 只能用于Number或者是Number的子类类型数据。
练习一
package day06;//需求:自己定义一个工具类,实现数组内元素的反转和输出class MyArrays<T>{ public void reverse(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) { StringBuilder stringBuilder = new StringBuilder(); for (int i=0;i<arr.length;i++) { if(i==0) { stringBuilder.append("["+arr[i]+","); }else if(i==arr.length-1){ stringBuilder.append(arr[i]+"]"); }else { stringBuilder.append(arr[i]+","); } } return stringBuilder.toString(); }}public class Demo1 { public static void main(String[] args) { // TODO Auto-generated method stub Integer[] integer = {1,2,3,4,5,6,7,8,9}; MyArrays tool = new MyArrays(); tool.reverse(integer); System.out.println("反转后的元素是:"+tool.toString(integer)); }}
练习二
public class Demo5 { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); ArrayList<Number> list2 = new ArrayList<Number>(); ArrayList<Double> list3 = new ArrayList<Double>();// print(list2); show(list); show(list3); } // 需求2: 定义一个方法可以接受任意类型的集合对象, 接收的集合对象只能存储Number或者Number子类类型的数据。 public static void show(Collection<? extends Number> c){ } //需求1: 定义一个方法可以接受任意类型的集合对象, 接收的集合对象只能存储Integer以及Integer父类类型的数据。 public static void print(Collection<? super Integer> c){ }}
用于平时自己复习回顾,如有错误,欢迎指正
个人微信号:yxx85561498,欢迎一起学习交流,努力进步
- java日常学习:泛型
- Java学习日常——泛型
- java日常学习:继承
- java日常学习:多态
- java日常学习:TreeSet
- java日常学习:jar包
- java ssm学习日常小问题
- java日常学习:数组小练习
- java日常学习:封装及其使用
- java日常学习:构造函数练习
- java日常学习:单例设计模式
- java日常学习:异常和finally块
- java日常学习:System系统类
- java日常学习:集合(一)
- java日常学习:StringBuffer常见使用方法
- java日常学习:事件(简要版)
- java日常学习:map双列集合
- 日常学习
- 2017-11-06-linux-解决vi中backspace无法删除字符
- Applet 类
- 发现小服务器被入侵了 cpu长期100%
- Ubuntu环境下配置ThinkPHP开发环境
- 笔记:udacity计算机导论 -5-29/30 查找、提取、并输出超链 if vs while
- java日常学习:泛型
- 个人知乎 ##基础九——爬虫入门PySpider
- 我的Raspberry Pi/树莓派有线网和无线网接通了------不需要树莓派显示器,键盘,鼠标,串口
- Ionic3学习笔记(十)实现夜间模式功能
- bzoj 4260: Codechef REBXOR(01字典树)
- 怎么在S12X上使用XGATE协处理器
- Excel在统计分析中的应用—第八章—假设检验-总体方差未知且为小样本下的均值之差检验
- FOJ2214 Knapsack problem(逆01背包)
- WIN10 java环境变量配置