首页 > 编程语言 >Java泛型里的Intersection Type

Java泛型里的Intersection Type

时间:2024-08-21 20:28:06浏览次数:11  
标签:MyInteface void getIntersection MyCat 泛型 MyClass Intersection Type public

Intersection Type

直译是叫交集类型,语法:&

示例写法

    public class MyClass {
        public void hello() {
            System.out.println("hello");
        }
    }

    interface MyInteface {
        // ...
        default void world() {
            System.out.println(" world");
        }
    }

    interface MyInteface2 {
        // ...
        default void intersection() {
            System.out.println(" intersection");
        }
    }

    /**
     * 交集类型
     */
    public class MyIntersection extends MyClass implements MyInteface, MyInteface2 {
        // ...
    }

    /**
     * 只能用于类上、方法上的泛型声明,实例化时不能使用&
     *
     * @param <T>
     */
    class MyCat<T extends MyClass & MyInteface & MyInteface2> {
        T t;
        public MyCat(T t) {
            this.t = t;
        }

        T getIntersection() {
            return this.t;
        }
    }

    @Test
    void testIntersection2() {
        MyIntersection myIntersection = new MyIntersection();
        MyCat<MyIntersection> myCat = new MyCat<>(myIntersection); // OK
        myCat.getIntersection().hello();
        myCat.getIntersection().world();
        myCat.getIntersection().intersection();
        MyCat<MyClass> myCat2 = new MyCat<>(); // compile error
        MyCat<MyInteface> myCat3 = new MyCat<>(); // compile error
    }

MyCat<T extends MyClass & MyInteface>即申明一个带泛型的交集类型,含义是T extends MyClass & MyInteface含义是,T既是MyClass的子类,也是MyInteface的子类,T同时拥有MyClass、MyInteface的所有行为。
这明明是MyClass、MyInteface的并集,为啥叫intersection type?因为T不是为了说明T有哪些行为,而是为了表达T的可选类型被限定在得兼具两种类型,可选类型范围变小,符合数学里的交集的含义。

标签:MyInteface,void,getIntersection,MyCat,泛型,MyClass,Intersection,Type,public
From: https://www.cnblogs.com/jiayuan2006/p/18372433

相关文章

  • PD type-c 取电协议芯片集成多协议 快充
    PD快充协议是一种电源传输协议,它使用type-c接口进行数据和信息的传输。快充协议允许充电器与设备之间进行智能识别和双向通信。通过这种通信,充电器能够了解设备支持的快充协议版本,最大接受电流等信息,并根据设备的需求调整输出电压与电流,从而实现快速充电。充电器通过type-c接......
  • 2Java加强-----泛型
    1.认识泛型publicclassGenericDemo1{publicstaticvoidmain(String[]args){//目标:认识泛型,搞清楚使用泛型的好处。ArrayListlist=newArrayList();list.add("java");list.add("php");list.add(23);l......
  • No qualifying bean of type 'feign' available: expected at least 1 bean which qua
    问题:刚用低代码平台引入的一个module,但是启动报错Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependencyException:Errorcreatingbeanwithname'ServiceImpl'definedinfile[Ser......
  • [JAVA]什么是泛型?泛型在Java中的应用
    目录1.初识泛型的应用2.创建自定义泛型类3.利用较小范围的泛型方法定义4.了解泛型通配符,什么是泛型通配符?1.初识泛型的应用    —所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。    —定义泛......
  • 解决Cannot find module ‘@/score/test/index.vue‘ or its corresponding type decl
    {"compilerOptions":{"target":"esnext","module":"esnext","strict":true,"jsx":"preserve","importHelpers":true,"moduleResolu......
  • 038、Vue3+TypeScript基础,使用router.push进行路由跳转并传参
    01、main.js//引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入路由importrouterfrom'./router'constapp=createApp(App);//使用路由app.use(router);//App.vue的根元素id为appapp......
  • 037、Vue3+TypeScript基础,使用router.push进行导航式路由跳转
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入路由importrouterfrom'./router'constapp=createApp(App);//使用路由app.use(router);//App.vue的根元素id为ap......
  • 036、Vue3+TypeScript基础,路由中使用replace不让前进后退
    01、代码如下:<template><divclass="app"><h2class="title">App.Vue路由测试</h2><!--导航区--><divclass="navigate"><router-linkreplaceto="/Home"class="nav......
  • FileTypeUtil.java 文件格式util
    //文件格式Utilpackagecom.lgq.ai.Util;importjava.util.Arrays;publicclassFileTypeUtil{publicstaticintfileType(StringfileName){if(!StringUtil.isEmpty(fileName)){StringfileType=fileName.split("\\.")[1];......
  • 一篇文章快速了解 Type-C 接口与传统 USB 接口的区别
    面对越来越多的电子产品,USB (Universal Serial Bus) 接口已经成为了我们日常生活中不可或缺的一部分。从最初的USB 1.0到如今广泛使用的USB Type-C(简称Type-C),USB接口经历了多次迭代升级。本文中简鹿办公将重点介绍Type-C接口与传统USB接口之间的主要区别。什么......