如何在标识符中使用 Unicode 字符编译 Java 代码

Vol*_*lt4 -1 java unicode

首先,我知道这违反了所有惯例和建议,但无论如何我想这样做。

\n

我如何(或者是否有可能)在标识符(方法名称、变量名称等)中使用 Unicode 字符来编译 Java 代码?

\n

我希望能够执行以下操作:

\n
public class  extends  {\n    public void \xd1\x81\xd0\xb4\xd0\xb5\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xa7\xd1\x82\xd0\xbe\xd0\xbd\xd0\xb8\xd0\xb1\xd1\x83\xd0\xb4\xd1\x8c() { ... }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是一个完全荒谬的例子,但你明白了。

\n

Fed*_*oca 6

不,你不能。

\n

标识符必须以所谓的Java 字母开头,即

\n
\n

Character.isJavaIdentifierStart(int)[...] 该方法返回的字符true

\n
\n

这又意味着

\n
\n

ch当且仅当以下条件之一为真时,字符 [ ] 可以启动 Java 标识符:

\n
    \n
  • isLetter(ch)返回真
  • \n
  • getType(ch)返回 LETTER_NUMBER
  • \n
  • ch是货币符号(例如\'$\')
  • \n
  • ch是连接标点字符(例如\'_\')。
  • \n
\n
\n

(可选)后续字符必须是Java 字母或数字,即

\n
\n

Character.isJavaIdentifierPart(int)[...] 该方法返回的字符true

\n
\n

这又意味着

\n
\n

如果满足以下任一条件,则字符可能是 Java 标识符的一部分:

\n
    \n
  • 这是一封信
  • \n
  • 它是货币符号(例如“$”)
  • \n
  • 它是一个连接标点符号(例如\'_\')
  • \n
  • 它是一个数字
  • \n
  • 它是一个数字字母(例如罗马数字字符)
  • \n
  • 这是一个组合标记
  • \n
  • 它是一个非间距标记
  • \n
  • isIdentifierIgnorable返回该字符的 true
  • \n
\n
\n

对于 或 来说,上述情况都不成立,但\xd1\x81\xd0\xb4\xd0\xb5\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xa7\xd1\x82\xd0\xbe\xd0\xbd\xd0\xb8\xd0\xb1\xd1\x83\xd0\xb4\xd1\x8c事实上,它是一个有效的标识符。

\n
\n

你可以做的(何苦呢)是编写一个预处理器,将这些表情符号转换为 Java 字母序列,其输出是一个带有有效标识符的 java 程序,你最终可以将其提供给编译器。

\n