当前位置: 移动技术网 > IT编程>开发语言>Java > Java中的Union Types和Intersection Types

Java中的Union Types和Intersection Types

2018年08月23日  | 移动技术网IT编程  | 我要评论

前言

union typeintersection type都是将多个类型结合起来的一个等价的“类型”,它们并非是实际存在的类型。

union type

union type(联合类型)使用比特或运算符|进行构造:

a | b | c

注意:|符号来构造union type类型只是java语言的规定,|在这里不代表比特或的含义。

上例中,a | b | c是一个union typeunion type的含义就是“或”只要满足其中一个即可

实例:捕获多个异常中的一个
try {
    // ...
} catch (exceptiona | exceptionb e) {
    
} 

就等价于:

try {
    // ...
} catch (exceptiona e) {
    
} catch (exceptionb e) {
    
}

intersection type

intersection type(交集类型)使用比特与运算符&进行:

a & b & c

intersection type(交集类型),虽然名称翻译过来是“交集”,但是intersection type并非数学上的交集含义。a & b & c的含义是:该交集类型兼具a、b、c的特征,相当于把a、b、c中每一个的相关成员都继承过来了

注意:type1 & type2 & type3 & ... & type n中,必须满足:至少有n-1个接口,如果有1个类必须放在一开始。

实例1:泛型类
class mya {
}

interface myb {
}

class combination extends mya implements myb {
}

class myc<t extends mya & myb> {

}

public class test {
    public static void main(string[] args) {
        // new myc<mya & myb>(); 报错, <>内不能用intersection type
        new myc<combination>(); // ok
    }
}

如何理解<t extends mya & myb>呢?可以将mya & myb等价为一个类型u,它兼具myamyb的特征,因此可以将combanation类作为myc的类型参数。

实例2:对lambda表达式进行强制类型转换
public class test {
    public static void main(string[] args) {
        runnable job =(runnable & serializable) () ->system.out.println("hello");
        class[] interfaces = job.getclass().getinterfaces();
        for (class i : interfaces) {
            system.out.println(i.getsimplename());
        }
    }
}

/*
runnable
serializable

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网