有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java7交集类型:规范具体说明了什么?

http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.9

  • 对于每个Ti(1≤ 我≤ n) ,设Ci为最具体的类或数组类型,以便Ti<;:Ci。那么一定有一些Tk<;:Ck以至于Ck<;:任何i(1)的Ci≤ 我≤ n) ,或发生编译时错误

  • 一个人≤ J≤ n、 如果Tj是一个类型变量,那么让Tj'是一个接口,其成员与Tj的公共成员相同;否则,如果Tj是一个接口,那么就让Tj'成为Tj

  • 那么交集类型的成员与类类型(§8)的成员相同,类类型有空体、直接超类Ck和直接超接口T1’。。。,Tn’,在交叉点类型出现的同一个包中声明

我本以为以下代码会导致编译时错误,但事实并非如此:

public interface I1 {}
public interface J1 extends I1 {}
public interface J2 {}
public interface J3 extends J2 {}

class C implements J1, J3 {}

public class A<T extends J1 & J3> {
    public static void main(String[] args) {
        A<C> a = new A<>();
    }

}

据我所知,Ti<;:Ci类型如下:

  • J1<;:I1
  • J3<;:J2

现在,我需要一个Tk<;:Ck,其中Ck<;:C1和Ck<;:C2,但如果Ck:=C1,那么I1<;:J2为假,如果Ck:=C2,则J2<;:I1是假的

我错过了什么


共 (0) 个答案