union type和intersection 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(交集类型)使用比特与运算符&
进行:
a & b & c
intersection type(交集类型),虽然名称翻译过来是“交集”,但是intersection type并非数学上的交集含义。a & b & c
的含义是:该交集类型兼具a、b、c
的特征,相当于把a、b、c
中每一个的相关成员都继承过来了
注意:在
type1 & type2 & type3 & ... & type n
中,必须满足:至少有n-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
,它兼具mya
和myb
的特征,因此可以将combanation
类作为myc
的类型参数。
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
如对本文有疑问, 点击进行留言回复!!
荐 嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)
SpringBoot项目部署到服务器之 Liunx环境安装jdk详细步骤
网友评论