当前位置: 首页 > news >正文

Java_自定义泛型类/接口/方法

自定义泛型类:

基本语法:

class 类名 <T,R.....>{        //也可以是接口 , ........表示可以有多个泛型

        成员

}

注意:

1)普通成员可以使用泛型(属性,方法)

2)使用泛型的数组,不能初始化

3)静态方法(属性)中不能使用类的泛型

4)泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确定类型)

5)如果在创建对象时,没有指定类型,默认为Object

package com.genericStu.customGeneric;public class CustomGeneric_ {public static void main(String[] args) {}
}
//解读:
//1.Tiger后面有泛型,所以我们把Tiger 称为自定义泛型类
//2.T,R,M 称为泛型的标识符,一般是单个的大写字母
//3.泛型的标识符可以有多个
//4.普通成员可以使用泛型(属性,方法)
//5.使用泛型的数组,不能初始化
class Tiger<T,R,M>{String name;R r;//属性 使用到了泛型M m;T t;//使用泛型的数组,不能初始化//T[] ts = new T[8];  因为数组在new 的时候不能确定 T的类型,就无法在内存开空间T ts[];public Tiger(String name, R r, M m, T t) {  //构造器使用泛型this.name = name;this.r = r;this.m = m;this.t = t;}public R getR() {   //返回类型使用到泛型return r;}public void setR(R r) {     //方法使用到泛型this.r = r;}//静态方法/属性中不能使用类的泛型//public static void m1(M m){}//static R r2;//因为静态是和类相关的,在类加载时,对象还没有创建//所以,如果静态方法和静态属性使用了泛型,JVM就无法初始化
}

自定义泛型接口:

基本语法:

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

}

注意:

1)接口中,静态成员也不能使用泛型(这个和泛型类规定一样)

2)泛型接口的类型,在继承接口或实现接口时确定

3)没有指定类型,默认为Object

package com.genericStu.customGeneric;public class CustomInterfaceGeneric {public static void main(String[] args) {}
}
interface IUsb<U,R>{//普通方法中,可以使用接口泛型R get(U u);void hi(R r);void run(R r1,R r2,U u1,U u2);int n = 10;//U name;   在接口中属性都是静态的 static final//在jdk8中,可以在接口中,使用默认方法default R method(U u){return null;}
}
//没有指定类型时默认为Object
//建议直接写成class C implements IUsb<Object,Object>
class C implements IUsb{    //等价于class C implements IUsb<Object,Object>@Overridepublic Object get(Object o) {return null;}@Overridepublic void hi(Object o) {}@Overridepublic void run(Object r1, Object r2, Object u1, Object u2) {}@Overridepublic Object method(Object o) {return IUsb.super.method(o);}
}//实现接口时,直接指定泛型接口的类型
//给U 指定Integer ,给R指定float
//所以,当我们实现IUsb方法时,会使用Integer替换U,使用float替换R
class BB implements IUsb<Integer,Float>{@Overridepublic Float get(Integer integer) {return null;}@Overridepublic void hi(Float aFloat) {}@Overridepublic void run(Float r1, Float r2, Integer u1, Integer u2) {}@Overridepublic Float method(Integer integer) {return IUsb.super.method(integer);}
}//继承接口
interface IA extends IUsb<String,Integer>{}
//当实现IA接口时,因为IA在继承IUsb接口时,指定了 U为String ,R为Double
//在实现IUsb接口时,使用String替换U,使用double替换R
//idea快捷键 ctrl + i 自动实现
class D implements IA{@Overridepublic Integer get(String s) {return null;}@Overridepublic void hi(Integer integer) {}@Overridepublic void run(Integer r1, Integer r2, String u1, String u2) {}@Overridepublic Integer method(String s) {return IA.super.method(s);}
}

自定义泛型方法:

基本语法:

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

}

注意:

1)泛型方法,可以定义在普通类中,也可以定义在泛型类中

2)当泛型方法被调用时,类型会确定

3)public void eat(E e){ } 修饰符后没有<T,R......> 则eat() 不是泛型方法,而是使用了泛型

package com.genericStu.customGeneric;import java.util.ArrayList;public class CustomMethodGeneric {public static void main(String[] args) {Car car = new Car();//调用泛型方法直接传值即可,传入参数后编译器就会确定类型,这里的100会被自动装箱变为Integercar.fly("泥嚎",100);car.fly(300,120);//测试//T就是String ,R就是ArrayListFish<String, ArrayList> fish = new Fish<>();fish.hello(new ArrayList(),11.3f);}
}
//泛型方法,可以定义在普通类中,也可以定义在泛型类中
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() 使用了类声明的泛型public void hi(T t,R r){}//泛型方法,可以使用类声明的泛型,也可以自己声明泛型public<K> void hello(R r,K k){System.out.println(r.getClass());System.out.println(k.getClass());}
}
http://www.dtcms.com/a/609250.html

相关文章:

  • EG2106 高端电压600V 半桥MOS管栅极驱动芯片技术解析
  • 上位机开发之JSON文件编辑器(动态UI)
  • Git 本地操作入门:版本控制基础、跨平台部署与仓库核心流程
  • Docker 缓存优化:通过 cpolar 内网穿透服务远程管理 Redis
  • 微算法科技(NASDAQ MLGO)在委托权益证明DPoS主链上引入PoW轻节点验证,提升抗量子攻击能力
  • 前缀和与差分数组
  • 微官网和移动网站区别网站设计行业前景
  • dw网站的站点建设阿里巴巴网站图片怎么做
  • 智慧判官-分布式编程评测平台
  • 基于 HT 技术的汽车制造车间数字孪生可视化系统
  • TOMCAT Docker 容器化部署指南
  • 自己做网站去哪买服务器天猫网站设计
  • React Native 自定义 ScrollView 滚动条:开箱即用的 IndicatorScrollView(附源码示例)
  • Java Web核心数据交互技术全解析
  • UML建模工具Enterprise Architect在DevOps中如何实现架构模型同步
  • 数据库-MYSQL作业五
  • 磁共振成像原理(理论)36:回波平面成像 (Echo-Planar Imaging)
  • mysql占用内存过大问题排查
  • 手游网站做cpc还是cpm广告号岳阳高端网站建设
  • 通过美剧学英语---学习笔记(2)
  • 【数据结构】排序详解:从快速排序分区逻辑,到携手冒泡排序的算法效率深度评测
  • 设计稿还原技巧:解决间距、阴影、字体适配的细节问题
  • 【034】Dubbo3从0到1系列之dubbo-remoting模块
  • 【数据结构】并查集(操作详解 + 模板 + 练习)
  • JS Map 函数的二度回炉
  • 网站建设类公司排名wordpress3.5.2
  • uniapp写H5授权登录及分享,返回到目标页面
  • 奥卡姆剃刀原理:机器学习中的简约哲学与实践指南
  • ASC学习笔记0007:用于与GameplayAbilities系统交互的核心ActorComponent
  • 福永附近做网站公司广州公共资源交易中心交易平台