gpt4 book ai didi

java - com.sun.tools.javac.code(javac 编译器)包中的这种奇怪语法是什么?它是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 06:48:00 25 4
gpt4 key购买 nike

我正在查看一些内部 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(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()]

看起来它返回一个整数。这是如何工作的?

最佳答案

这只是你的反编译器的一些奇特的工件。

如果您以源代码形式查看相同的代码 ( http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/com/sun/tools/javac/code/Types.java#1658 ),它只是枚举上的 switch 语句:

        @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);
}
}

关于java - com.sun.tools.javac.code(javac 编译器)包中的这种奇怪语法是什么?它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43336962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com