本文知识点(目录):

1、泛型的好处
    2、泛型在集合中的常见应用(这里只用String类型举例)
    3、在泛型中是不能使用基本数据类型,如果需要使用基本数据类型,那么就使用基本数据类型对应的封装类型
    4、在方法上自定义泛型
    5、在类上自定义泛型
    6、在接口类上自定义泛型
    7、泛型的上下限



泛型是jdk1.5使用的新特性

1、泛型的好处

1.将运行是异常提前至编译时。
    2.消除强制类型转换,所有的强制转换都是自动和隐式的,提高代码的重用率。
    3.提高了Java程序的类型安全性。

2、泛型在集合中的常见应用(这里只用String类型举例)

ArrayList<String> list=new ArrayList<String>();    推荐使用

下面两种写法是为了兼顾新老系统的兼容性问题
       ArrayList<String> lists=new ArrayList(); 
       ArrayList lists=new ArrayList<String>();

注意:泛型没有多态的概念,左右两边的数据类型要一致,或者只写一边的泛型。

3、在泛型中是不能使用基本数据类型,如果需要使用基本数据类型,那么就使用基本数据类型对应的封装类型

基本数据类型    封装类型
     byte--------------->Byte
     short-------------->Short
     int----------------->Integer
     long--------------->Long
  
     double----------->Double
     float--------------->Float
 
     boolean--------->Boolean
 
     char-------------->Character

4、在方法上自定义泛型

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

格式:
修饰符 <声明自定的泛型> 返回值类型 函数名(自定义泛型的类型 参数){ }

4.2、泛型方法需要注意的事项
    1.泛型方法中自定义泛型具体数据类型是在调用该函数的时候传入实时参数确定的。
    2.自定义泛型所用的标识符只要符号标识符的命名规范即可;但是我们习惯用一个大小的字母表示。

实例

 public class Demo2 {
public static void main(String[] args) {
int i = getData();
String s = getData("hello");
System.out.println(i);//返回结果:23
System.out.println(s);//返回结果:hello
}
public static <abc>abc getData(abc o){//在方法上,自定义泛型
return o;
}
}

5、在类上自定义泛型

格式:
class 类名<声明自定义泛型>{
}

 5.2、泛型类需要注意的事项
    1.泛型类上自定义泛型是使用该类创建对象的时候自定的具体数据类型的.
    2.如果一个类已经自定义了泛型,使用该类创建对象时,如果没有在指定泛型的具体类型,那么默认为Object类型
    3.静态的函数不能使用类上自定义泛型,如果静态函数需要使用,必须要在函数上自定泛型

实例1

 package com.dhb.collection;

 /**
* @author DSHORE / 2018-5-25
*
*/
//元素的反转
class MyArrays{
public <T> void reverse(T[] arr) {//在方法上,自定义泛型
for (int starIndex = ,endIndex = arr.length-; starIndex < endIndex; starIndex++,endIndex--) {
T temp = arr[starIndex];
arr[starIndex] = arr[endIndex];
arr[endIndex] = temp;
}
for (int i = ; i < arr.length; i++) {
System.out.print(arr[i]);//返回结果:87654321
}
}
}
public class Demo18 {
public static void main(String[] args) {
MyArrays ma = new MyArrays();
Integer[] integer = {,,,,,,,};
ma.reverse(integer);
}
}

实例2

 package com.dhb.collection;

 /**
* @author DSHORE / 2018-5-25
*
*/
//元素的反转
class MyArrays<T>{//在类上,自定义泛型
public void reverse(T[] arr) {
for (int starIndex = ,endIndex = arr.length-; starIndex < endIndex; starIndex++,endIndex--) {
T temp = arr[starIndex];
arr[starIndex] = arr[endIndex];
arr[endIndex] = temp;
}
/*for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);//返回结果:87654321
}*/
}
public String toString(T[] arr) {//自定义 输出格式
StringBuilder sb =new StringBuilder();
for (int i = ; i < arr.length; i++) {//第一个元素
if(i == ){
sb.append("["+arr[i]+",");
}else if(i == arr.length-){//最后一个元素
sb.append(arr[i]+"]");
}else{//中间的元素
sb.append(arr[i]+",");
}
}
return sb.toString();
}
}
public class Demo18 {
public static void main(String[] args) {
MyArrays<Integer> ma = new MyArrays<Integer>();
Integer[] in = {,,,,,,,};
ma.reverse(in);
System.out.println(ma.toString(in));//返回结果:[8,7,6,5,4,3,2,1]
}
}

6、在接口类上自定义泛型

格式:
interface 接口名<声明自定义泛型>{
}

6.1、泛型接口需要注意的事项

1.在接口上自定义的泛型,具体数据类型是在实现接口的时候指定的。
    2.在接口上自定义的泛型,具体数据类型在实现接口时没有指定,那么默认问哦Object类型。
    3.如果需要在创建接口实现类对象的时候才指定自定义泛型,那么需要一下格式:class<T> 类名 implements 接口<T>{    }

6.2、如果延长接口的自定义泛型的数据类型,那么格式如下

格式:
public class Demo4<t> implements Dao<t>{//t:声明自定义泛型
}

实例

 interface Dao<T>{
public void add(T t);
public void update(T t);
}
public class Demo4<T> implements Dao<T>{
public static void main(String[] args) {
Demo4<String> d=new Demo4<String>();
}
@Override
public void add(T t) {
// TODO Auto-generated method stub
}
@Override
public void update(T t) {
// TODO Auto-generated method stub
}
}

7、泛型的上下限

? super Integer   允许是Integer类型或者是Integer父类的类型  泛型的下限
    ? extends Number   允许是Number类型或者Number子类的数据类型  泛型的上限

 package com.dhb.collection;

 import java.util.ArrayList;
import java.util.Collection; /**
* @author DSHORE / 2018-5-25
*
*/
/* 泛型的上下限
*
* 需求1:定义一个函数可以接收任意类型的集合对象,要求接收的集合对象只能存储Integer或者是Integer的父类类型的数据
* 需求2:定义一个函数可以接收任意类型的集合对象,要求接收的集合对象只能存储Number或者是Number的子类类型的数据
*
* 泛型中的通配符:?
* <? super Integer>:只能存储Interger或者是Interger的父类元素. 泛型的下限
* <? extends Number>:只能存储Number或者Number以下的子类元素. 泛型的上限
* */
public class Demo19 {
public static void main(String[] args) {
//泛型的上线
ArrayList<Double> list = new ArrayList<Double>();//Number最大,所以<>里的泛型是子类的什么类型都行(上线,看关键字extends)
getDate(list);
//泛型的下线
ArrayList<Integer> list1 = new ArrayList<Integer>();//要看super后面的类型确定当前泛型的类型(下线,看关键字super)
print(list1);
}
//泛型的上线
public static void getDate(Collection<? extends Number> c){//Number或者以下的都可以 }
//泛型的下线
public static void print(Collection<? super Integer> c){//Interger或者以上的都可以 }
}

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/9090210.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

 
 
 
G
M
T
 
检测语言
世界语
中文简体
中文繁体
丹麦语
乌克兰语
乌兹别克语
乌尔都语
亚美尼亚语
伊博语
俄语
保加利亚语
信德语
修纳语
僧伽罗语
克罗地亚语
冰岛语
加利西亚语
加泰罗尼亚语
匈牙利语
南非祖鲁语
卡纳达语
卢森堡语
印地语
印尼巽他语
印尼爪哇语
印尼语
古吉拉特语
吉尔吉斯语
哈萨克语
土耳其语
塔吉克语
塞尔维亚语
塞索托语
夏威夷语
威尔士语
孟加拉语
宿务语
尼泊尔语
巴斯克语
布尔语(南非荷兰语)
希伯来语
希腊语
库尔德语
弗里西语
德语
意大利语
意第绪语
拉丁语
拉脱维亚语
挪威语
捷克语
斯洛伐克语
斯洛文尼亚语
斯瓦希里语
旁遮普语
日语
普什图语
格鲁吉亚语
毛利语
法语
波兰语
波斯尼亚语
波斯语
泰卢固语
泰米尔语
泰语
海地克里奥尔语
爱尔兰语
爱沙尼亚语
瑞典语
白俄罗斯语
科萨
科西嘉语
立陶宛语
索马里语
约鲁巴语
缅甸语
罗马尼亚语
老挝语
芬兰语
苏格兰盖尔语
苗语
英语
荷兰语
菲律宾语
萨摩亚语
葡萄牙语
蒙古语
西班牙语
豪萨语
越南语
阿塞拜疆语
阿姆哈拉语
阿尔巴尼亚语
阿拉伯语
韩语
马其顿语
马尔加什语
马拉地语
马拉雅拉姆语
马来语
马耳他语
高棉语
齐切瓦语
  世界语
中文简体
中文繁体
丹麦语
乌克兰语
乌兹别克语
乌尔都语
亚美尼亚语
伊博语
俄语
保加利亚语
信德语
修纳语
僧伽罗语
克罗地亚语
冰岛语
加利西亚语
加泰罗尼亚语
匈牙利语
南非祖鲁语
卡纳达语
卢森堡语
印地语
印尼巽他语
印尼爪哇语
印尼语
古吉拉特语
吉尔吉斯语
哈萨克语
土耳其语
塔吉克语
塞尔维亚语
塞索托语
夏威夷语
威尔士语
孟加拉语
宿务语
尼泊尔语
巴斯克语
布尔语(南非荷兰语)
希伯来语
希腊语
库尔德语
弗里西语
德语
意大利语
意第绪语
拉丁语
拉脱维亚语
挪威语
捷克语
斯洛伐克语
斯洛文尼亚语
斯瓦希里语
旁遮普语
日语
普什图语
格鲁吉亚语
毛利语
法语
波兰语
波斯尼亚语
波斯语
泰卢固语
泰米尔语
泰语
海地克里奥尔语
爱尔兰语
爱沙尼亚语
瑞典语
白俄罗斯语
科萨
科西嘉语
立陶宛语
索马里语
约鲁巴语
缅甸语
罗马尼亚语
老挝语
芬兰语
苏格兰盖尔语
苗语
英语
荷兰语
菲律宾语
萨摩亚语
葡萄牙语
蒙古语
西班牙语
豪萨语
越南语
阿塞拜疆语
阿姆哈拉语
阿尔巴尼亚语
阿拉伯语
韩语
马其顿语
马尔加什语
马拉地语
马拉雅拉姆语
马来语
马耳他语
高棉语
齐切瓦语
         
 
 
 
文本转语音功能仅限200个字符
 
  选项 : 历史 : 反馈 : Donate 关闭

最新文章

  1. 从Insider计划看Win10的发展
  2. ado.net 用c#与数据库连接实现增删改查
  3. noi 9267 核电站
  4. mysql 修改数据库的列
  5. Restful与webService区别
  6. Android圆角矩形的实现
  7. ASP.NET虚拟路径小结
  8. Nodejs的多线程
  9. synchronized优化
  10. Django 发送邮件
  11. 第3章 简单的C程序设计——顺序程序设计
  12. 前端 ---JS中的面向对象
  13. 1. @ModelAttribute注解
  14. Vue2.0组件之间通信(转载)
  15. HDU 1969 精度二分
  16. MySql_SQLyog+SQL Assistant实现智能提示
  17. Mysql InnoDB锁
  18. bootstrap-datetimepicker如何只显示到日期
  19. sklearn中的cross_val_score()函数
  20. java将list&lt;T&gt;导出为xls文件

热门文章

  1. bzoj 2178 自适应Simpson积分
  2. 4:JAVA UUID 生成
  3. linux查看当前文件夹的大小
  4. Python【datetime】模块
  5. Java poi读取,写入Excel2007
  6. 转:UIViewController中各方法调用顺序及功能详解
  7. 视音频数据处理入门:H.264视频码流解析
  8. bzoj千题计划150:bzoj2738: 矩阵乘法
  9. codevs 3369 膜拜(线型)
  10. 关于安装在win10上的oracle10g 兼容性问题