使用 ByteBuddy 表示原始 class 常量的哪种方式更好?
Which way of representing a primitive class constant is better using ByteBuddy?
ByteBuddy 提供了两种机制来表示原始的 Class
的常量:
我知道第一个在常量池中创建了一个“真正的”动态常量。我知道第二个被 ByteBuddy 特别识别并最终导致在常量池中存储某种 class 常量的其他路径。 (例如,您可以在 FixedValue#value(TypeDescription)
的文档中看到 TypeDescription
最终会以某种未指定的非 ByteBuddy 特定格式转换为常量池中的常量,(大概)不是与动态常量相同。)
我还知道 ByteBuddy 支持 JVM 回到 1.5,只有 JDK 版本 11 或更高版本支持真正的动态常量。我正在使用 JDK 15,个人不需要担心比这更早的任何事情。
考虑到这一切:我应该使用 JavaConstant.Dynamic.ofPrimitiveType(Class)
来制作常量表示原语 -classes 还是应该使用 TypeDescription.ForLoadedType.of(Class)
来制作它们?我是否缺少一种表示形式的某些优势?
动态常量是引导程序,它会导致最小的运行时开销。因此,静态常量可能是更好的选择,但它简化了您的代码,使用动态常量没有危险。
ByteBuddy 提供了两种机制来表示原始的 Class
的常量:
我知道第一个在常量池中创建了一个“真正的”动态常量。我知道第二个被 ByteBuddy 特别识别并最终导致在常量池中存储某种 class 常量的其他路径。 (例如,您可以在 FixedValue#value(TypeDescription)
的文档中看到 TypeDescription
最终会以某种未指定的非 ByteBuddy 特定格式转换为常量池中的常量,(大概)不是与动态常量相同。)
我还知道 ByteBuddy 支持 JVM 回到 1.5,只有 JDK 版本 11 或更高版本支持真正的动态常量。我正在使用 JDK 15,个人不需要担心比这更早的任何事情。
考虑到这一切:我应该使用 JavaConstant.Dynamic.ofPrimitiveType(Class)
来制作常量表示原语 -classes 还是应该使用 TypeDescription.ForLoadedType.of(Class)
来制作它们?我是否缺少一种表示形式的某些优势?
动态常量是引导程序,它会导致最小的运行时开销。因此,静态常量可能是更好的选择,但它简化了您的代码,使用动态常量没有危险。