Java中的union_Java中的Union Types和Intersection Types

前言

Union Type和Intersection Type都是将多个类型结合起来的一个等价的“类型”,它们并非是实际存在的类型。

Union Type

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

A | B | C

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

上例中,A | B | C是一个Union type,Union 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 {

}

public class Test {

public static void main(String[] args) {

// new MyC(); 报错, <>内不能用Intersection Type

new MyC(); // OK

}

}

如何理解呢?可以将MyA & MyB等价为一个类型U,它兼具MyA和MyB的特征,因此可以将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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值