2012-01-29 72 views
3

我有,其中包括以下金块的应用程序堆栈跟踪:

com.google.inject.internal.util.$ComputationException 

是什么在类名的前面的$说明什么?

回答

4

这意味着ComputationException包含在另一个类中,否则不能公开显示。

请参阅http://www.retrologic.com/innerclasses.doc7.html

+0

如果ComputationException被包含在另一个类中,那么其他类的名称不会在$?之前。 – emmby 2012-01-29 04:42:26

+1

@emmby是的。由于这是一个位于“inject.internal”命名空间的google软件包,因此我会继续说它是通过内部的巫术生成的。我不能告诉你班上的目的是什么,只有$意味着什么...而这就是“这不是人类写的公开课”。 – Borealid 2012-01-29 04:46:42

3

$字符只能用于机械生成的源代码,或者很少用于访问传统系统上的预先存在的名称。

5

在Java内部,$字符被认为是一个有效的标识符字符,就像字母或数字。然而,编译器在生成内部类之类的东西时通常在内部使用它。

Java Language Specification

Java的字母包括大写和小写的ASCII拉丁字母A-Z\u0041-\u005a)和a-z\u0061-\u007a),并且,由于历史原因,ASCII下划线(_,或\u005f)和美元符号($\u0024)。 $字符只能用于机械生成的源代码,或者很少用于访问传统系统上的预先存在的名称。

+0

这看起来不是内部类,因为$ – emmby 2012-01-29 04:50:35

+1

之前没有“外部”类名您在问关于编译器关于合成类命名的内部决策。在编译器做出的决定之外,'$'及其位置并不意味着什么。 – 2012-01-29 04:56:23