如何将Java对象转换为可直接用于源码的Java字面量字符串?
Java字面量转换工具方案
1. JDK 9+ 内置方案(无第三方依赖)
JDK 9开始自带的JShell模块原生支持该能力,直接调用即可完全匹配需求:
import jdk.jshell.JShell; public class LiteralUtil { private static final JShell JSHELL_INSTANCE = JShell.create(); public static String toLiteral(Object value) { return JSHELL_INSTANCE.varValue(value); } public static void main(String[] args) { String str = "hello"; double d = 1.5; long myLong = 100L; int[] ints = new int[] { 5, 6 }; System.out.println(toLiteral(str)); // 输出 "hello" System.out.println(toLiteral(d)); // 输出 1.5 System.out.println(toLiteral(myLong)); // 输出 100L System.out.println(toLiteral(ints)); // 输出 new int[]{5, 6} } }
模块化项目需要在module-info.java中声明requires jdk.jshell;
2. 第三方库方案(兼容全Java版本)
推荐使用业内通用的Java代码生成工具Square JavaPoet,原生支持正确生成各类字面量,无需自行处理任何语法细节:
- 引入JavaPoet依赖即可使用
- 调用示例:
import com.squareup.javapoet.CodeBlock; public class LiteralUtil { public static String toLiteral(Object value) { return CodeBlock.of("$L", value).toString(); } }
输出效果和内置JShell方案完全一致,自动处理字符串转义、long类型后缀L、数组初始化语法等所有场景。
内容的提问来源于stack exchange,提问作者Chris Lercher
相关产品推荐
相关产品推荐

