文章目录

  • 一、泛型简介
  • 二、泛型类
  • 三、泛型方法
  • 四、静态方法的泛型
  • 五、泛型类与泛型方法完整示例

一、泛型简介


泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 ;

java 泛型 与 C++ 模板 : Java 中的泛型 , 是仿照 C++ 中的 模板 开发的 , 目的是让开发者可以写出 通用 , 灵活 的代码 ;

伪泛型 : Java 中的泛型 , 是 伪泛型 , Java 泛型开发好之后 , 在 编译阶段 就 将泛型相关的信息消除 了 , 不会泛型留到运行时 ;

泛型类型 :

  • 泛型方法 : 方法有参数 , 方法的参数 可以指定成一些 泛型 ;
  • 泛型类 : 类 也可以有参数 , 将 类型 作为 参数 传入类中 ;
  • 泛型接口 : 接口 的 参数 , 也可以是泛型 ;

将 类型 传入 泛型方法 , 泛型类 , 泛型接口 中 , 可以 动态地 指定一些类型 ;

泛型的作用 :

  • 安全检查 : 在 编译阶段 , 就可以进行 代码检查 , 将更少的错误带到运行时 ;
  • 避免强转 : 避免 类型的强转 导致不必要的安全问题 ;
  • 提高性能 : 使用泛型可以 提高 Java 的性能 ;

二、泛型类


泛型类 : 在 类名后面 使用 <T> 声明泛型 , 则在该类中 , 可以使用该泛型类型 T 类型 ;

特别注意 , 该类中的 如下 222 个方法 不是 泛型方法 ; 其中的 参数 , 返回值 类型是 T , 但 这个 T 是作为一个正常的类型使用的 , 并不是声明在 方法 中的泛型 ;

如果 类 , 接口 , 方法 是 泛型类 , 泛型接口 , 泛型方法 , 则该 类 , 接口 , 方法 必须由 <T> 修饰 , 有个带尖括号的 T ;

    public T getData() {return data;}public void setData(T data) {this.data = data;}

泛型类完整代码示例 :

/*** 泛型类*  该 T 类型作为参数使用*  T 是参数化类型 , 可以由外部传入** @param <T>*/
public class Student<T> {private String name;private int age;/*** 该数据的类型未知*  使用泛型表示 , 运行时确定该类型*/private T data;public Student(String name, int age, T data) {this.name = name;this.age = age;this.data = data;}/*** 该方法不是泛型方法*  该方法是普通方法 , 返回值类型是 T 类型* @return*/public T getData() {return data;}public void setData(T data) {this.data = data;}
}

三、泛型方法


泛型方法 : 在方法的 返回值前 , 使用 <T> 声明泛型的方法 , 是泛型方法 ; 将某个类型作为参数传入 ;

泛型个数 : 该方法是泛型方法 , 且指定了 222 个泛型 , 泛型的个数可以有很多个 , 多个泛型之间 , 使用逗号隔开 ;

泛型方法 与 泛型类 中的泛型 :

  • 泛型不同 : 泛型方法指定的泛型 T 与 类中的泛型 T 没有任何关系 , 这两个 T 可以是不同的类型 ;

  • 泛型相同 : 泛型方法中定义的 泛型 T , 与 参数类型的 T , 返回值类型的 T , 方法内部的 T , 都是同一个类型 ;

/*** 泛型类*  该 T 类型作为参数使用*  T 是参数化类型 , 可以由外部传入** @param <T>*/
public class Student<T> {private String name;private int age;/*** 该数据的类型未知*  使用泛型表示 , 运行时确定该类型*/private T data;public Student(String name, int age, T data) {this.name = name;this.age = age;this.data = data;}/*** 泛型方法 , 是将某个类型作为参数传入*      方法指定泛型 , 写法如下** 该方法是泛型方法*      方法指定了 2 个泛型*      泛型个数 , 泛型的个数可以有很多个*      多个泛型之间 , 使用逗号隔开** 为方法指定的泛型 T 与类中的泛型 T 没有任何关系*      这两个 T 可以是不同的类型** 泛型方法中定义的泛型 T*      与参数类型的 T*      返回值类型的 T*      方法内部的 T*      都是同一个类型** 与泛型类中的 T 完全没有关系** @param <T>* @param <A>* @return*/public <T, A> T getData2(T arg){T data = arg;return data;}
}

四、静态方法的泛型


静态方法泛型 : 如果静态方法中 使用了 类中的泛型 T , 作为参数 或 返回值 , 这种使用时错误的 ;

如果必须在 静态方法 中使用泛型 T , 则该泛型 T 必须是静态方法的泛型 , 不能是类的泛型 ;

错误用法 :

正确用法 :

五、泛型类与泛型方法完整示例


/*** 泛型类*  该 T 类型作为参数使用*  T 是参数化类型 , 可以由外部传入** @param <T>*/
public class Student<T> {private String name;private int age;/*** 该数据的类型未知*  使用泛型表示 , 运行时确定该类型*/private T data;public Student(String name, int age, T data) {this.name = name;this.age = age;this.data = data;}/*** 该方法不是泛型方法*  该方法是普通方法 , 返回值类型是 T 类型* @return*/public T getData() {return data;}public void setData(T data) {this.data = data;}/*** 泛型方法 , 是将某个类型作为参数传入*      方法指定泛型 , 写法如下 ;** 该方法是泛型方法*      方法指定了 2 个泛型*      泛型个数 , 泛型的个数可以有很多个*      多个泛型之间 , 使用逗号隔开** 泛型方法指定的泛型 T 与类中的泛型 T 没有任何关系*      这两个 T 可以是不同的类型** 泛型方法中定义的泛型 T*      与参数类型的 T*      返回值类型的 T*      方法内部的 T*      都是同一个类型** 与泛型类中的 T 完全没有关系** @param <T>* @param <A>* @return*/public <T, A> T getData2(T arg){T data = arg;return data;}/*** 如果静态方法中使用类 类中的泛型*      这种使用时错误的** 如果必须在 静态方法 中使用泛型 T*      则该泛型 T 必须是静态方法的泛型*      不能是类的泛型** @param arg* @return*/public static <T> T getData3(T arg){T data = arg;return data;}
}

【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )相关推荐

  1. Java泛型(泛型类,泛型方法,静态方法泛型,泛型类与泛型方法例子)

    泛型 泛型简介 泛型可以理解为参数化类型,主要作用在类,方法和接口上. Java泛型 与 C++ 模板 : Java 中的泛型 , 是仿照 C++ 中的模板开发的 , 目的是让开发者可以写出通用,灵活 ...

  2. Java:高级之泛型概念引入,泛型可以设置多个类型参数,泛型继承和泛型接口实现,限制泛型可用类型,泛型通配的方式,泛型方法,泛型方法限制泛型可用类型

    目录页         泛型简介         泛型类         限制泛型可用类型         类型通配声明         泛型方法 问题引入 如果我们需要产生多个对象,每个对象的逻辑完 ...

  3. Java 泛型方法/接口、泛型限定

    一.为什么要定义泛型方法 1.从泛型类到泛型方法的演变过程 我们先来看个例子 //定义一个泛型类,并定义如下两个方法 class Test<T> {public void show(T t ...

  4. Java静态方法和泛型

    前言 在写web接口的时候想定义一个通用的返回类,用到了泛型,在定义静态方法创建类对象的时候发现静态方法无法使用泛型.于是进行了一番研究. 形如下面代码块中的静态方法是无法定义的.因为泛型类中的静态方 ...

  5. java 接口的泛型方法_Java泛型/泛型方法/通配符/泛型接口/泛型泛型擦出

    从JDK1.5以后引入了三大常用新特性:泛型.枚举(enum).注解(Annotation).其中JDK1.5中泛型是一件非常重要的实现技术,它可以帮助我们解决程序的参数转换问题.本文为大家详细介绍一 ...

  6. java泛型方法作用_java泛型的作用与使用方法是什么?

    泛型,即"参数化类型".一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变 ...

  7. java泛型类指定多个泛型_Java泛型中的多态

    java泛型类指定多个泛型 从作为Java程序员的早期开始,我们都知道如何实例化和使用Collection对象. 实例化为具体类的List接口将如下所示. List myArrayList = new ...

  8. java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等

    java泛型方法 通配符 泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 将泛型与集合类一起使 ...

  9. Java静态方法与非静态方法的泛型

    Java中,非静态方法可以使用类的泛型,也可以定义自己的泛型:静态方法由于随着类的加载而加载,不能访问类的泛型(因为在创建对象的时候才确定),因此必须定义自己的泛型类型. 详细请参考:https:// ...

最新文章

  1. Swift 中使用 SQLite——修改和删除数据
  2. 8.2.1.3 Range Optimization
  3. 14. Longest Common Prefix
  4. 452. 用最少数量的箭引爆气球(贪心算法+思路+详解)07
  5. MySQL Innodb存储引擎使用B+树做索引的优点
  6. 为什么MIP-Cache存在
  7. 让你少走弯路,这里有一份机器学习高效入门指南
  8. python电脑下载教程-电脑64位怎么下载python
  9. DB2事务日志使用经验
  10. 只包含因子2 3 5的数 (思维和二分)
  11. 解析offsetHeight,clientHeight,scrollHeight之间的区别
  12. java毕业设计针织企业外包系统Mybatis+系统+数据库+调试部署
  13. CVPR 2021 论文大盘点-超分辨率篇
  14. error in opening zip file
  15. 神经元网络技术有限公司,神经网络网站
  16. LInux:进程等待之wait() waitpid()
  17. B站《三体》动画正式开播 刘慈欣:宇宙很大,生活更大
  18. 一文读懂机器学习,大数据/自然语言处理/算法全有了
  19. 整数有约 | AI智能篆刻:活学活用,让传统文化“潮”起来
  20. 二进制中正负数表示和判断

热门文章

  1. DEDE常见问题(转)
  2. ORACLE查询语句简单实例
  3. 通过SecureCRT连接Vmware中的RHEL6.3的方法
  4. C++默认参数与函数重载
  5. VC回调函数定义和使用
  6. PHP CURL 图灵机器人
  7. PHP安装memcache扩展
  8. zabbix 3.2.2 server端(源码包)安装部署 (一)【转】
  9. [Github]watch和star的区别
  10. 触发Full GC执行的情况 以及其它补充信息