You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java枚举中使用根号'√'触发Unclosed Character Literal错误的求助

解决Java枚举中Unicode字符导致的Unclosed Character Literal错误

我来帮你搞定这个问题!你遇到的Unclosed Character Literal错误,本质是编译器没法正确识别你写的'√'这个字符——虽然本身是单个Unicode字符,但如果你的源文件编码和编译器预期的编码不匹配,编译器会把这个字符拆成多个字节,误以为你的字符字面量没写完,就抛出了这个错误。

下面给你两个可靠的解决办法:

方法1:使用Unicode转义序列(最稳妥)

直接把'√'替换成它对应的Unicode转义码'\u221A',这样不管你的源文件编码是什么,编译器都能精准解析这个字符。修改后的代码如下:

public enum TokenTest {
    T_SQRT("sqrt", '\u221A'), // 用Unicode转义代替直接写根号字符
    T_NUMBER("example", 'a');
    private Character symbol;
    private String function;
    TokenTest() {}
    TokenTest(Character symbol) { this(null, symbol); }
    TokenTest(String function) { this(function, null); }
    TokenTest(String function, Character symbol) {
        this.function = function;
        this.symbol = symbol;
    }
}

这个方法的好处是完全不受文件编码影响,是跨环境的通用解决方案。

方法2:统一源文件和编译器的编码

如果你更倾向于直接写'√'字符,可以确保你的源文件编码和编译器使用的编码一致,推荐用UTF-8:

  • IDE环境(比如IntelliJ IDEA/Eclipse):在设置里把项目的所有编码(包括源文件编码、控制台编码等)都改成UTF-8。以IDEA为例,路径是File → Settings → Editor → File Encodings,把Global EncodingProject EncodingDefault encoding for properties files都设为UTF-8,勾选Transparent native-to-ascii conversion
  • 命令行编译:使用javac命令时加上-encoding UTF-8参数,比如:
javac -encoding UTF-8 TokenTest.java

这样编译器就会用UTF-8解析你的源文件,正确识别'√'这个字符。

内容的提问来源于stack exchange,提问作者has19

火山引擎 最新活动