ASM的 ClassVisitor
构造函数需要传递 Opcodes
之一的 ASM4
, ASM5
, ASM6
, ASM7
, ASM8
或 ASM9
.
我怎么知道是哪个 ASM#
用于每个版本的Java?什么 ASM#
我会用于 Java 8 吗?什么 ASM#
我会用于 Java 11 吗?
最佳答案
ASM…
常量描述了您的软件所需的最低 ASM 库版本。这对于兼容性至关重要,例如在访问者 API 中,当您覆盖旧版本中不存在的方法时,您在链接旧版本时不会注意到。该方法永远不会被调用。
因此,使用 ASM…
常数允许更早地发现此类问题。这就是为什么一些实现类提供 a constructors not requiring the version number ,不允许用于子类,而它们的 constructor for subclasses确实需要它。由于只有子类可以覆盖方法,因此受此问题的影响。
如果您不打算将您的软件与旧版本的 ASM 库一起使用,只需使用与您当前的 ASM 库版本相对应的数字,即不带 EXPERIMENTAL
的最高版本。后缀。否则,我建议在开发和测试期间使用旧版本,这再次允许只使用最高的 ASM…
该版本中存在的编号。
您可以使用最新的 ASM 库生成面向所有版本的类。这取决于您传递给 visit
的版本方法。这是 V1_8
适用于 Java 8 和 V11
对于 Java 11。这些常量的实际值与 the versions of the JVM specification 相同.
关于java - 如何将 Opcodes 中 ASM 的 API 版本映射到 Java 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63399682/