位置: IT常识 - 正文

day29--Java泛型02

编辑:rootadmin
Java泛型02 5.自定义泛型 5.1自定义泛型类 基本语法: class 类名<T,R...>{//…表示可以有多个泛型 成员 } 注意细节: 普通成员可以使用泛型(属性、方法) 使用泛型的数组不能初始化 静态方法中不能使用类的泛型 泛型类的类型,是在创建类的对象时确定的(因为创建对象时,需要指 ... Java泛型025.自定义泛型5.1自定义泛型类

推荐整理分享day29--Java泛型02,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

基本语法:

class 类名<T,R...>{//…表示可以有多个泛型 成员}

注意细节:

普通成员可以使用泛型(属性、方法)使用泛型的数组不能初始化静态方法中不能使用类的泛型泛型类的类型,是在创建类的对象时确定的(因为创建对象时,需要指定确定类型)如果在创建对象时没有指定类型,默认为Object

例子:

// Tiger后面有泛型,所以我们把 Tiger称为自定义泛型类class Tiger<T,R,M>{// T,R,M是泛型的标识符,一般是单个的大写字母;泛型的标识符可以有多个 String name; R r; // 普通成员可以使用泛型(属性、方法),这里是属性使用泛型 M m; T t; // 使用泛型的数组不能初始化,因为数组在new的时候不能确定T的类型,就无法在内存开辟空间 T[] ts ; public Tiger(String name) { this.name = name; } public Tiger(R r, M m, T t) {// 构造器使用泛型 this.r = r; this.m = m; this.t = t; } //因为静态是和类相关的,在来加载的时候,对象还没有创建 //所以如果静态方法和静态属性使用到泛型,JVM就无法完成初始化 //因此静态方法和静态属性不能使用泛型// static R r2;// public static void m1(M m){//// } public String getName() { return name; } public void setName(String name) { this.name = name; } public R getR() { return r; } public void setR(R r) { // 方法使用泛型 this.r = r; } public M getM() { // 返回类型 使用泛型 return m; } public void setM(M m) { this.m = m; } public T getT() { return t; } public void setT(T t) { this.t = t; } @Override public String toString() { return "Tiger{" + "name='" + name + '\'' + ", r=" + r + ", m=" + m + ", t=" + t + ", ts=" + Arrays.toString(ts) + '}'; }}day29--Java泛型02

练习:说明自定义泛型代码是否正确,并说明原因

package li.generic.customgeneric;import java.util.Arrays;public class CustomGeneric_ { public static void main(String[] args) { //T=Double , R=String , M=Integer Tiger<Double,String ,Integer> g = new Tiger<>("john");//ok g.setT(10.9);//ok // g.setT("yy");//错误,类型不对 System.out.println(g); //这里没有指定泛型类型,全部默认为Object类型 //T=Object , R=Object , M=Object Tiger g2 = new Tiger("join~~"); g2.setT("yy");//ok,因为T为Object类型,“yy”为String类型,是Object的子类 System.out.println("g2="+g2); }}

5.2自定义泛型接口

基本语法:

interface 接口名<T,R...>{}

注意细节:

接口中,静态成员不能使用泛型(这个和泛型类的规定一样)泛型接口的类型,在继承接口或者实现接口时确定没有指定类型,就默认为Object类

例子:

package li.generic.customgeneric;public class CustomInterfaceGeneric { public static void main(String[] args) { }}interface IUsb<U,R>{ //U name; //这里的接口属性默认前面加上了static final,接口中,静态成员不能使用泛型 //普通方法中,可以使用接口泛型 R get(U u); void hi(R r); void run(R r1,R r2,U u1,U u2); //在jdk8中,可以在接口中使用默认方法,也是可以使用泛型的 default R method(U u){ return null; }}// 在继承接口时,指定泛型接口的类型interface IA extends IUsb<String,Double>{ }//当我们去实现IA接口时,因为IA在继承IUsb接口时,指定了U为String类型,R为 Double类型//因此,在实现IUsb方法的时候,使用String替换U,使用Double替换Rclass AA implements IA{ @Override public Double get(String s) { return null; } @Override public void hi(Double aDouble) { } @Override public void run(Double r1, Double r2, String u1, String u2) { }}//实现接口时,直接指定泛型接口的类型//给U指定了Integer,给R指定了Float//所以当我们实现IUsb方法时,会使用Integer替换U,使用Float替换Rclass BB implements IUsb<Integer,Float>{ @Override public Float get(Integer integer) { return null; } @Override public void hi(Float aFloat) { } @Override public void run(Float r1, Float r2, Integer u1, Integer u2) { }}//没有指定类型,则默认为Objectclass CC implements IUsb{//等价于 class CC implements IUsb<Object,Object>{ @Override public Object get(Object o) { return null; } @Override public void hi(Object o) { } @Override public void run(Object r1, Object r2, Object u1, Object u2) { }}5.3自定义泛型方法

基本语法:

修饰符 <T,R...> 返回类型 方法名(参数列表){}

注意细节:

泛型方法,可以定义在普通类中,也可以定义在泛型类中当泛型方法被调用时,类型会确定public void eat(E e){},修饰符后面没有<T,R...> 则eat方法不是泛型方法,只是使用了泛型

例子:

package li.generic.customgeneric;import java.util.ArrayList;public class CustomMethodGeneric { public static void main(String[] args) { Car car = new Car(); car.fly("宝马", 100);//当调用方法时,传入参数,编译器就会确定类型 // class java.lang.String //class java.lang.Integer System.out.println("=========="); car.fly(300, 100.7);//当调用方法时,传入参数,编译器就会确定类型 //class java.lang.Integer //class java.lang.Double System.out.println("=========="); //fish的T=String,R=ArrayList Fish<String, ArrayList> fish = new Fish<>(); fish.hello(new ArrayList(),11.3f); //class java.util.ArrayList //class java.lang.Float }}//泛型方法,可以定义在普通的类中,也可以定义在泛型类中class Car {//普通类 public void run() {//普通方法 } //<T,R>就是泛型,是提供给fly方法使用的 public <T, R> void fly(T t, R r) {//泛型方法 System.out.println(t.getClass()); System.out.println(r.getClass()); }}class Fish<T, R> {//泛型类 public void run() {//普通方法 } public <U, M> void eat(U u, M m) {//泛型方法 } //说明:下面的hi方法不是泛型方法,因为修饰符后面没有表示符<T,R...> //是hi方法使用了类
本文链接地址:https://www.jiuchutong.com/zhishi/304643.html 转载请保留说明!

上一篇:PHPCMS漏洞之逻辑问题导致getshell(web逻辑漏洞)

下一篇:织梦/dedecms TAG标签按栏目显示(只显示当前栏目标签)(织梦怎么样)

  • 腾讯会议画中画怎么设置(腾讯会议画中画怎么取消)

    腾讯会议画中画怎么设置(腾讯会议画中画怎么取消)

  • 剪映边框素材怎么添加(剪映边框素材怎么扣掉中间部分)

    剪映边框素材怎么添加(剪映边框素材怎么扣掉中间部分)

  • 苹果13怎么关闭相机快门声音(苹果13怎么关闭静音模式)

    苹果13怎么关闭相机快门声音(苹果13怎么关闭静音模式)

  • QQ心的符号怎么打(qq怎么用符号打出一个爱心形状)

    QQ心的符号怎么打(qq怎么用符号打出一个爱心形状)

  • iphone11pro续航时间(iphone11pro 续航)

    iphone11pro续航时间(iphone11pro 续航)

  • 淘宝追评在哪里看(手机淘宝追评在哪里)

    淘宝追评在哪里看(手机淘宝追评在哪里)

  • 快手上每日打卡是咋回事(快手上每日打卡是真的吗)

    快手上每日打卡是咋回事(快手上每日打卡是真的吗)

  • 对方静音了怎么才能打给他听到(对方静音了怎么能让手机响)

    对方静音了怎么才能打给他听到(对方静音了怎么能让手机响)

  • 快手私信怎么删除不了(快手私信怎么删除对方看不到)

    快手私信怎么删除不了(快手私信怎么删除对方看不到)

  • 华为手机能投屏到电视上吗(华为手机能投屏到墙上吗)

    华为手机能投屏到电视上吗(华为手机能投屏到墙上吗)

  • 华为p30和p30lite区别(华为P30和小米13对比)

    华为p30和p30lite区别(华为P30和小米13对比)

  • 手机老是有提示音是怎么回事(手机老是有提示音但是没消息怎么关闭)

    手机老是有提示音是怎么回事(手机老是有提示音但是没消息怎么关闭)

  • 苏宁退款多长时间到账(苏宁退款成功了还需要发货吗)

    苏宁退款多长时间到账(苏宁退款成功了还需要发货吗)

  • 微机硬件系统中最核心的部件是?(微机硬件系统中主机包括)

    微机硬件系统中最核心的部件是?(微机硬件系统中主机包括)

  • 怎么找回抖音密码(找回我原来的抖音)

    怎么找回抖音密码(找回我原来的抖音)

  • 为什么别人打我电话总是关机(为什么别人打我微信电话没有声音)

    为什么别人打我电话总是关机(为什么别人打我微信电话没有声音)

  • 飞行模式下别人打电话有记录吗?(飞行模式下别人发短信我会收到吗)

    飞行模式下别人打电话有记录吗?(飞行模式下别人发短信我会收到吗)

  • 从网上下载软件时使用的网络服务类型是(从网上下载软件时使用的网络类型)

    从网上下载软件时使用的网络服务类型是(从网上下载软件时使用的网络类型)

  • 为什么ps文字打不出来(为什么ps打字总是字特别小)

    为什么ps文字打不出来(为什么ps打字总是字特别小)

  • python美元转换成人民币转换代码(python兑换美元)

    python美元转换成人民币转换代码(python兑换美元)

  • c语言中main函数是什么(C语言中main函数的位置可以任意吗)

    c语言中main函数是什么(C语言中main函数的位置可以任意吗)

  • 税控盘的功能特点是
  • 没有收入可以不给抚养费吗
  • 税务知识:价外费用包括哪些费用?
  • 建筑施工企业的分公司区域公司等较大的
  • 个体工商户还没有使用怎么注销
  • 一般纳税人交的增值税能不能抵扣企业所得税
  • 劳务成本算营业成本吗
  • 会计报废怎么处理
  • 企业所得税季报是全年累计吗
  • 永续盘存制的含义
  • 其他预算收入科目核算内容
  • 商标转让所需要的材料
  • 专票入账用哪一联
  • 购房40%税款第二年抵扣如何做账
  • 会计人士必知建筑业主要成本会计分录一览
  • 小规模纳税人的认定标准是什么
  • 税局如何查无票收入
  • 企业哪些可以抵扣增值税
  • 土地闲置费是否可以列入生产成本
  • 消防安装工程会计核算
  • 购入苗木的会计分录
  • 应交税金的明细科目
  • 企业银行保证金账户怎么查询
  • 购买融资租赁资产
  • 企业收到留抵退税宣传报道
  • win10玩游戏太卡了
  • 企业跨年度的收入退回应该如何进行会计处理?
  • 软件远程调用失败是什么意思
  • 土地使用税如何终止申报
  • php怎么添加样式
  • wordpress采集教程
  • PHP:is_executable()的用法_Filesystem函数
  • 股权转让会记分录
  • 企业年金缴纳标准400什么意思啊
  • 发票怎么保管不会坏
  • CUDA(10.2)+PyTorch安装加配置 详细完整教程
  • yolov1 实现
  • 100多年前程序员
  • redis的eval命令
  • 事业收入如何确认
  • 织梦官方网站
  • 缴纳个人所得税有什么好处
  • 年会服装费属于什么费用
  • 收支平衡表excel怎么做
  • MySQL读写分离中间件
  • 差旅费报销范围包括
  • 进项税额转出是借方科目还是贷方科目
  • 应该免税的增值税是什么
  • 公司租赁职工车辆账务处理
  • 土地出让金返还比例是多少
  • 赠品视同销售会计分录如何编制?
  • 上年度库存商品错误如何更正
  • 收到销项负数发票怎么做分录
  • 财政授权支付的概念
  • 出口免抵退和免退有什么区别
  • 从农民手里租用土地用于科研要开发票吗
  • 收到委托加工物资发票
  • 会计内帐外帐的区别在哪
  • 获取sqlsession
  • mysql5.7.22安装教程图解
  • macos 关闭屏幕
  • windows 8 build
  • /proc目录造成linux根目录爆满
  • vsftp命令
  • win7win8双系统怎么装
  • win8.1系统更新
  • js实例教程
  • jQuery插件封装时如要实现链式编程,需要
  • bat删除所有文件
  • Unity3D事件函数的执行顺序
  • js array insert
  • unity中播放视频
  • 安卓的通用在哪里
  • 浏览器url怎么看
  • nodejs python交互
  • jquery 跨域方法
  • 法律服务所与律师事务所区别
  • 清税申报表怎么填写
  • 怎么打印个人所得税扣缴申报表
  • 企业资金运转资金投放
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设