标签:ble getc java pes 理解 联合 xtend 必须 types
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
SerializableJava中的Union Types和Intersection Types
标签:ble getc java pes 理解 联合 xtend 必须 types
原文地址:https://www.cnblogs.com/Yaigu/p/9523150.html