目录

  • 泛型概念
  • 泛型可设置多个类型参数
  • 泛型继承
  • 泛型接口
  • 限制泛型可用类型
  • 泛型通配声明
  • 泛型方法
  • 泛型方法限制泛型可用类型

泛型概念

  • 问题引入:如果我们需要产生多个对象,每个对象的逻辑完全一样,只是对象内的成员啊变量的类型不同。那我们如何去做?两种解决办法:


方法一:

class Cls1
{int a;public Cls1(int a){//构造方法this.a = a;}public int getData(){return a;}
}class Cls2
{String b;//仅仅类型不同 小数、浮点数... 类的膨胀,重用性差public Cls2(String b){//构造方法this.b = b;}public String getData(){return b;}
}public class test {public static void main(String[] args) {Cls1 cls1 = new Cls1(10);System.out.println(cls1.getData());Cls2 cls2 = new Cls2("你好呀!");System.out.println(cls2.getData());}}

方法二:

class Cls1
{Object a;//Object是所有数据类型的父类public Cls1(Object a){//构造方法this.a = a;}public Object getData(){return a;}
}public class test {public static void main(String[] args) {Cls1 cls1 = new Cls1(10);         //1.5版本以下运行出错,询问回复int不是类,是数据类型,String是类System.out.println(cls1.getData());//Integer才是类Cls1 cls2 = new Cls1("你好呀!");System.out.println(cls2.getData());//System.out.println((int)cls2.getData());这样强制转换 编译通过但运行出错!ppt有讲}}

这里可以使用泛型的解决方法:
创建工程时选择1.5版本JDK及以上

class Cls1<T>
{T a;//Object是所有数据类型的父类public Cls1(T a){//构造方法this.a = a;}public T getData(){return a;}
}public class test {public static void main(String[] args) {Cls1<Integer> cls1 = new Cls1<Integer>(10);System.out.println(cls1.getData());Cls1<String> cls2 = new Cls1<String>("你好呀!");System.out.println(cls2.getData());}}

泛型可设置多个类型参数


上述泛型类特点第二点的例子:

class Cls1<T>
{T a;public Cls1(T a){//构造方法this.a = a;}public T getData(){return a;}
}class Cls2<T,T2>
{T a;T2 b;public Cls2(T a,T2 b){this.a = a;this.b = b;}public T getData(){return a;}public T2 getData2(){return b;}
}public class test {public static void main(String[] args) {Cls1<Integer> cls1 = new Cls1<Integer>(10);System.out.println(cls1.getData());Cls1<String> cls2 = new Cls1<String>("你好呀!");System.out.println(cls2.getData());Cls2<Integer,String> cls3 = new Cls2<Integer,String>(100,"好热!");System.out.println(cls3.getData());System.out.println(cls3.getData2());}}

运行结果:

10
你好呀!
100
好热!

泛型继承

abstract class Cls1<T>//抽象类不能实例化(不能new)
{T a;public Cls1(T a){//构造方法this.a = a;}public T getData(){return a;}abstract void printInfo();
}class Cls2<T,T2> extends Cls1<T>
{T2 b;public Cls2(T a,T2 b){super(a);this.b = b;}public T2 getData2(){return b;}void printInfo(){System.out.println("输出");}
}public class test {public static void main(String[] args) {Cls2<Integer,String> cls = new Cls2<Integer,String>(100,"好热!");//抽象类不能进行实例化(Cls1不能new)cls.printInfo();}}

泛型接口

abstract class Cls1<T>//抽象类
{T a;public Cls1(T a){//构造方法this.a = a;}public T getData(){return a;}abstract void printInfo();
}interface cls3<T>   //接口
{abstract void printInfoInCls3(T t);
}class Cls2<T,T2> extends Cls1<T> implements cls3<T>
{T2 b;public Cls2(T a,T2 b){super(a);this.b = b;}public T2 getData2(){return b;}void printInfo(){System.out.println("输出");}public void printInfoInCls3(T t) {// TODO Auto-generated method stubSystem.out.println(t);}
}public class test {public static void main(String[] args) {Cls2<Integer,String> cls = new Cls2<Integer,String>(100,"好热!");//抽象类不能进行初始化cls.printInfo();cls.printInfoInCls3(100);}}

运行结果:

输出
100

限制泛型可用类型


默认使用:

abstract class Cls1<T extends Object>

实现某个接口:

interface move   //接口
{abstract void printInfoInCls3();
}abstract class Cls1<T extends move>//不用implements
{...
}

泛型通配声明

泛型方法


例子:

class B
{public <T> void printInfo(T t) {//泛型方法System.out.println(t);}public void print1(int a){//比方法重载高效System.out.println(a);}public void print1(char a){System.out.println(a);}public void print1(String a){System.out.println(a);}
}public class test {public static void main(String[] args) {B b = new B();b.printInfo("哈哈");b.printInfo(1234);b.printInfo(0.5);b.printInfo('a');}}

运行结果:

哈哈
1234
0.5
a

泛型方法限制泛型可用类型

Java高级 —— 泛型相关推荐

  1. java高级--泛型

    1. java高级--泛型 1. 什么是泛型? 2. 为什么使用泛型? 3. 如何使用泛型? 4. 泛型类 5. 泛型的通配符 6. 泛型的上限和下限 7. 泛型接口 8. 泛型方法 2.什么是泛型? ...

  2. java 高级泛型_java泛型的高级应用

    展开全部 在上面的例子中,由于没有限制class GenericsFoo类型持有者T的范围,实际上这里32313133353236313431303231363533e59b9ee7ad9431333 ...

  3. java 高级泛型_Java 泛型高级

    1.限制泛型可用类型 在定义泛型类别时,预设可以使用任何的类型来实例化泛型中的类型,但是如果想要限制使用泛型的类别时,只能用某个特定类型或者其子类型才能实例化该类型时,使用extends关键字指定这个 ...

  4. java实现泛型检索_高级Java泛型:检索泛型类型参数

    java实现泛型检索 在JDK5中引入Java泛型之后, Java泛型Swift成为许多Java程序的组成部分. 但是,乍一看似乎很简单的Java泛型,程序员很快就会迷失此功能. 大多数Java程序员 ...

  5. java高级之泛型详解

    定义:在java1.5之后推出的. 泛型又叫参数化类型或者类型参数化,在不创建新的类型的情况下,通过泛型指定不同类型来控制形参具体限制的类型,姑且把声明在类上的泛型也叫形参. 泛型应用的意义: 在编译 ...

  6. java高级教程_高级Java教程

    java高级教程 课程大纲 学习Java基础很容易. 但是,真正钻研该语言并研究其更高级的概念和细微差别将使您成为一名出色的Java开发人员. 网络上充斥着"软","便宜 ...

  7. java使用泛型后消除泛型_如何以及何时使用泛型

    java使用泛型后消除泛型 本文是我们名为" 高级Java "的学院课程的一部分. 本课程旨在帮助您最有效地使用Java. 它讨论了高级主题,包括对象创建,并发,序列化,反射等. ...

  8. 高级java开发_我最喜欢的Java高级开发人员书籍

    高级java开发 我上一篇博客文章 (我对高级Java开发人员的十个最喜欢的在线资源)的想法,是由Xiaoran Wang发表的"面向高级Java开发人员的十大网站"的启发. Wa ...

  9. 我最喜欢的Java高级开发人员书籍

    我上一篇博客文章 (我对高级Java开发人员的十个最喜欢的在线资源)的想法是由Xiaoran Wang发表的针对高级Java开发人员的十大网站的启发. Wang还写了一篇名为<面向Java高级开 ...

最新文章

  1. Python科学计算扩展库NumPy之np.array()与np.asarray()区别
  2. sql between包括两端吗_简单查询-SQL
  3. 攻防世界Reverse第六题open-source
  4. 高校学院计算机实验室管理系统概述,高校实验室管理系统
  5. android 解决getColor()方法过时
  6. 道路交通安全违法行为图像取证技术规范_海康移动取证方案中的设备介绍
  7. 【算法竞赛学习】心跳信号分类预测-数据分析
  8. 更多Requests的小技巧以及总结
  9. Windows Subsystem for Linux(WSL)安装emqx
  10. Java并发编程实战~Guarded Suspension模式
  11. 多年以后重发:多线程安全的变量模板
  12. 数据清洗-python实践
  13. linux查看程序写文件内容,Linux 文件内容查看命令
  14. 每周进步要点(第50周12.4-12.11)
  15. php无重复字符的最长子串,无重复字符的最长字串问题
  16. 【数据结构的魅力】005.链表问题专项
  17. ROS中机械手臂的运动规划
  18. System.out简单解释
  19. 各种手段终于将土豆视频url请求找到了
  20. 评点2021-2022年上市的那些Go语言新书

热门文章

  1. 初谈逻辑读、物理读、预读
  2. Qt之QAbstractItemView视图项拖拽(二)
  3. py文件转exe时包含paramiko模块出错解决方法
  4. 设计前沿:25个设计师向您展示 iOS 7 界面
  5. 如此理解面向对象编程
  6. SCCM 2007系列教程之六使用组策略实现SCCM客户端
  7. 全球视频监控设备市场规模分析
  8. I2C总线之(一)---概述
  9. YAFFS2文件系统在嵌入式LINUX系统中的应用
  10. Design Compiler指南——施加设计约束