包com.sun.tools.javac.code(javac编译器)中的这种奇怪语法是什么?它是如何工作的?
我在查看一些内部javac sun编译器API源代码时,在Types类中遇到了这个问题:包com.sun.tools.javac.code(javac编译器)中的这种奇怪语法是什么?它是如何工作的?,java,compilation,javac,Java,Compilation,Javac,我在查看一些内部javac sun编译器API源代码时,在Types类中遇到了这个问题: public Boolean visitTypeVar(TypeVar var1, Type var2) { switch(null.$SwitchMap$com$sun$tools$javac$code$TypeTag[var2.getTag().ordinal()]) { case 12: if(Types.this.isSubtype(var
public Boolean visitTypeVar(TypeVar var1, Type var2) {
switch(null.$SwitchMap$com$sun$tools$javac$code$TypeTag[var2.getTag().ordinal()]) {
case 12:
if(Types.this.isSubtype(var1, var2)) {
return Boolean.valueOf(true);
} else {
if(Types.this.isCastable(var1.bound, var2, Types.this.noWarnings)) {
((Warner)Types.this.warnStack.head).warn(LintCategory.UNCHECKED);
return Boolean.valueOf(true);
}
return Boolean.valueOf(false);
}
case 13:
case 16:
return Boolean.valueOf(true);
case 14:
case 15:
default:
return Boolean.valueOf(Types.this.isCastable(var1.bound, var2, (Warner)Types.this.warnStack.head));
}
}
这句话的第二句话很有趣:
null.$SwitchMap$com$sun$tools$javac$code$TypeTag[var2.getTag().ordinal()]
看起来它返回了一个整数。这是如何工作的?这只是您的反编译器的一些奇特的工件 如果查看源代码表单()中的相同代码,它只是枚举上的一个
开关语句:
@Override
public Boolean visitTypeVar(TypeVar t, Type s) {
switch (s.tag) {
case ERROR:
case BOT:
return true;
case TYPEVAR:
if (isSubtype(t, s)) {
return true;
} else if (isCastable(t.bound, s, Warner.noWarnings)) {
warnStack.head.warn(LintCategory.UNCHECKED);
return true;
} else {
return false;
}
default:
return isCastable(t.bound, s, warnStack.head);
}
}
不,你没有。您正在查看反编译的结果。不一样。