本文知识点(目录):

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 关闭

java基础34 泛型的使用的更多相关文章

  1. 黑马程序员:Java基础总结----泛型(高级)

    黑马程序员:Java基础总结 泛型(高级)   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...

  2. 黑马程序员——JAVA基础之泛型和通配符

    ------- android培训.java培训.期待与您交流! ---------- 泛型:            JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...

  3. Java基础知识--泛型

    什么是泛型?为什么使用泛型? 泛型,就是参数化类型.提到参数,最熟悉的就是定义方法时候的形参,然后调用此方法时传递实参.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也 ...

  4. Java基础:泛型

    Java的泛型是什么呢, 就是类型的參数化,这得类型包含方法參数和返回值.也就是原本该是确定类型的地方换成了变量,把类型的确定时间向后延迟了. 在之前,学过"重载"的概念,重载是什 ...

  5. day1 java基础回顾-泛型

    2.泛型(Generic) 当集合中存储的对象类型不同时,那么会导致程序在运行的时候的转型异常 1 import java.util.ArrayList; 2 import java.util.Ite ...

  6. 【Java基础】泛型

    Num1:请不要在新代码中使用原生类型 泛型类和接口统称为泛型.每种泛型定义一组参数化的类型,构成格式是:类或接口名称,接着用<>把对应于泛型形式类型的参数的实际参数列表括起来.比如:Li ...

  7. 黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API

    ---------- android培训.java培训.期待与您交流! ---------- 一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制 ...

  8. Java基础之泛型——使用二叉树进行排序(TryBinaryTree)

    控制台程序. 1.实现针对容器类的基于集合的循环 为了让容器类类型的对象能够在基于集合的for循环中可用,类必须并且只需要满足一个要求——必须实现泛型接口java.lang.Iterable<& ...

  9. java基础之 泛型

    泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法 ...

随机推荐

  1. 洛谷 3379 最近公共祖先(LCA 倍增)

    洛谷 3379 最近公共祖先(LCA 倍增) 题意分析 裸的板子题,但是注意这题n上限50w,我用的边表,所以要开到100w才能过,一开始re了两发,发现这个问题了. 代码总览 #include &l ...

  2. 解题:HAOI 2012 道路

    题面 这题不开O2怎么过=.= 可能这种有关最短路的计数题做多了就有些感觉了...... 以每个点为基准跑出一张最短路图,然后对每个边$(u,v)$统计两个东西.一个$pre[u]$表示到达$u$这个 ...

  3. BZOJ 1497 [NOI2006]最大获利

    1497: [NOI2006]最大获利 Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前 ...

  4. k最近邻算法(kNN)

    from numpy import * import operator from os import listdir def classify0(inX, dataSet, labels, k): d ...

  5. 在ASP.NET MVC中对表进行通用的增删改

    http://www.cnblogs.com/nuaalfm/archive/2009/11/11/1600811.html 预备知识: 1.了解反射技术 2.了解C#3.0中扩展方法,分布类,Lin ...

  6. Socket通信的简单例子

    客户端代码: package com.bobohe.socket; import java.io.*; import java.net.*; public class TalkClient { pub ...

  7. 1.Linux的发展历史以及 GNUGPL和open source

    发展历史: 20实际60年代:那时候的计算机一般只有在军事,科研以及学术院校才能见到,不是一般人能接触的东西.开始的时候计算机的时候的输入靠卡片阅读器,即程序开发者在卡片上打洞放入卡片阅读器上输入,在 ...

  8. arcgis求邻接矩阵

    求邻接矩阵 教程链接   http://m.blog.csdn.net/wan_yanyan528/article/details/49175673 (1) 将目标shp文件导出一份副本备用(以省级为 ...

  9. python---基础知识回顾(十)进程和线程(多线程)

    前戏:多线程了解 使用多线程处理技术,可以有效的实现程序并发,优化处理能力.虽然进程也可以在独立的内存空间并发执行,但是生成一个新的进程必须为其分配独立的地址空间,并维护其代码段,堆栈段和数据段等,这 ...

  10. COGS 513 八

    513. 八 http://www.cogs.pro/cogs/problem/problem.php?pid=513 ★☆   输入文件:eight.in   输出文件:eight.out   简单 ...