Java高级 —— 泛型

目录

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

泛型概念

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

在这里插入图片描述
方法一:

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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python显示目录中的文件_Python中的文件和目录操作实现

Python中的文件和目录操作实现对于文件和目录的处理&#xff0c;虽然可以通过操作系统命令来完成&#xff0c;但是Python语言为了便于开发人员以编程的方式处理相关工作&#xff0c;提供了许多处理文件和目录的内置函数。重要的是&#xff0c;这些函数无论是在Unix、Windows还是…

wopihost

项目介绍 基于wopi协议开发的WopiHost, 支持word, excel&#xff0c;ppt(仅支持预览)等文档的预览和编辑。 运行环境 需要安装Office online 2016才可以使用&#xff0c;基于jdk 1.8&#xff0c;spring boot开发。 使用案例 word文档预览 http://[owas.domain]/wv/wordviewerfr…

java 人物属性

写代码&#xff0c;可以浏览人物的属性&#xff1a;package day14; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JComboBox; im…

龙芯3a4000 交叉编译链接错误

0x0 交叉编译平台&#xff1a; amd ubuntu20交叉编译目标平台&#xff1a;LOONGSON 3A4000交叉编译器&#xff1a;7.3.1 在编译时出现如下报错&#xff1a; mips-linux-gnu-ld -r -Lmips-loongson3a-app-gcc/lib -o octeontx_fpavf.o.o octeontx_fpavf.o.pmd.o octeontx_fp…

安卓APP_ Fragment(5)—— Fragment + ViewPager2 模拟微信首页 (2)两者联动翻页

摘自&#xff1a;安卓APP_ Fragment&#xff08;5&#xff09;—— Fragment ViewPager2 模拟微信首页 &#xff08;2&#xff09;两者联动实现翻页 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-04-22 00:11:43 网址&#xff1a;https://blog.csdn.net/weixin_4474…

stmmac描述符的结构和初始化

stmmac 描述符&#xff08;Descriptors&#xff09; stmmac的描述符有两个个模式&#xff0c;分别是ring模式和chain模式&#xff0c;根据特性的不同支持&#xff0c;描述符又有以下3个形式norm、Alternate 、 Enhanced。下面主要讲下ring模式下的Enhanced描述符结构&#xff…

Android中利用productFlavors配置多渠道

build.gradle(app)设置 android {flavorDimensions "default"productFlavors{//不同渠道360{dimension "default"//替换AndroidManifest中的值manifestPlaceholders [channel_value:"360"]}qq{dimension "default"//替换AndroidManif…

Ubuntu服务器安装snmpd(用于监控宝)

2019独角兽企业重金招聘Python工程师标准>>> 一、安装snmpd&#xff1a; sudo apt-get install snmpd 二、修改配置文件 vi /etc/snmp/snmpd.conf 找到这样的两行 agentAddress udp:127.0.0.1:161 #agentAddress udp:161,udp6:[::1]:161 将他们的注释交换一下 #…

安卓APP_ 四大基本组件(1)—— Activity

摘自&#xff1a;安卓APP_ 四大基本组件&#xff08;1&#xff09;—— Activity 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-04-22 15:56:18 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/116006048 配合菜鸟教程食用效果更佳&#xf…

bootdefault和configuration_springboot常用注解、包引入和自动配置功能解读

springboot使用起来确实很方便&#xff0c;做到开箱即用&#xff0c;减少了许多繁琐的配置。不过在使用过程中时常会想&#xff0c;为啥会这样方便&#xff0c;springboot为我们做哪些工作。或者是我们在使用的过程中&#xff0c;会遇到springboot不满足的情况&#xff0c;我们…

radare2 常用操作总结

radare2 简介 radare2是一个用C语言编写的跨平台的二进制分析工具&#xff0c;支持ARM、MIPS、X86等平台&#xff0c;支持分析多种格式的二进制文件如ELF、Mach-O、Fatmach-O, PE、PE、 MZ、 COFF等&#xff0c;同时也支持多种操作系统如Windows (since XP)、GNU/Linux、GNU/D…

Could NOT find SDL_image (missing:SDL_IMAGE_LIBRARIES SDL_IMAGE_INCLUDE_DIRS)

sudo apt-get install libsdl-image1.2-dev转载于:https://www.cnblogs.com/sea-stream/p/9792496.html

Erlang TCP Socket的接收进程的2种方案

转自&#xff1a;http://blog.csdn.net/summerhust/article/details/8740973 一旦打开了一个使用&#xff34;&#xff23;&#xff30;连接的套接字&#xff0c;它就始终保持打开状态&#xff0c;直至任何一方关闭它或因为一个错误而终止。在建立一个连接时&#xff0c;一般为…

序列化与反序列化(1)Serializable —— Java原生态方法

摘自&#xff1a;序列化与反序列化&#xff08;1&#xff09;Serializable —— Java原生态方法 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-05-08 19:20:21 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/116503261 本文为学习笔记&…

极路由4刷机

准备工作 https://www.right.com.cn/forum/thread-161906-1-1.html https://breed.hackpascal.net/ 在第二个链接里下载路由器对应的breed固件&#xff0c;固件的说明见第一个链接&#xff0c;下文以极路由4为例演示 由于极路由官方挂了&#xff0c;无法进行root&#xff0…

背景颜色及背景图片相关的属性

1.background-color   设置背景颜色&#xff0c;取颜色值   注意&#xff1a;     1.所有元素默认的背景颜色都是透明色&#xff0c;新建窗口的白色不是body的背景色&#xff0c;是浏览器渲染的     2. 背景颜色从边框位置开始绘制     3. 如果元素添加内边距&…

评论安装_评论送|机电安装监理质量控制要点130页

来源&#xff1a;网络整理&#xff0c; 如有侵权请联系删除因本文篇幅有限&#xff0c;只能展示60页&#xff0c;全部130页需要您对本文进行精彩评论或者转发分享&#xff0c;加微信dahe0608送给您本文的ppt原件因本文篇幅有限&#xff0c;只能展示60页&#xff0c;全部130页需…

积跬步-java任职要求

2019独角兽企业重金招聘Python工程师标准>>> 1.JAVA基础扎实&#xff0c;熟悉io、多线程、集合等基础框架&#xff0c;熟悉分布式、缓存、消息、搜索等机制&#xff1b; 2.四年以上使用java进行web开发的经验&#xff0c;熟练使用spring 、MVC等框架&#xff0c;熟悉…

MIPS内联汇编

0X0 近几天使用内联汇编来完成部分功能&#xff0c;下面总结下基础知识点&#xff0c;以便以后查询 语法基本结构 __asm__ __volatile__("汇编语句\n\t""汇编语句\n\t":输出寄存器:输入寄存器:寄存器破坏表);‘:’把内联汇编分割为了4个部分 第一部分 如…

安卓APP_ 控件(11)webView —— 简单应用:显示网页

摘自&#xff1a;安卓APP_ 控件&#xff08;11&#xff09;webView —— 简单应用&#xff1a;显示网页 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-05-11 11:50:52 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/116602469 目录 简单了…