在堆栈跟踪中看到以下内容:
myorg.vignettemodules.customregistration.NewsCategoryVAPDAO.getEmailContentByID(I)Lmyorg/pushemail/model/EmailContent;
“(I)L
”是什么意思?
在堆栈跟踪中看到以下内容:
myorg.vignettemodules.customregistration.NewsCategoryVAPDAO.getEmailContentByID(I)Lmyorg/pushemail/model/EmailContent;
“(I)L
”是什么意思?
Z
: boolean
B
: byte
C
: char
S
: short
I
: int
J
: long
F
: float
D
: double
L
fully-qualified-class-name ;
: 完全限定类[
type : type数组V
: void
(I)Lmyorg/pushemail/model/EmailContent;
表示该方法接受一个类型为int
的参数,并返回一个类型为myorg.pushemail.model.EmailContent
的对象。这意味着该方法接受一个 int
参数,并返回 myorg.pushemail.model.EmailContent
"L" 到 ";" 的字符串是返回类型的一种描述符。括号里面的内容是方法参数(在这个例子中只有一个)。
这些类型描述符是 Java 虚拟机规范的一部分,位于第4.3.2节。 表4.3-A 显示了所有使用的代码。当类被编译时,采用这种形式的描述符来指定方法的签名以及字段和变量的类型。
在 Java 序列化中,方法描述符是要哈希的信息的一部分,用于形成可序列化类的默认 serialVersionUID
。
在 RMI 中,方法描述符被哈希,结果被用来标识在远程接口中正在被调用的方法。
它说,在类myorg.vignettemodules.customregistration.NewsCategoryVAPDAO
中没有名为getEmailContentByID
的方法,该方法接受int
参数(用(I)表示),并返回一个名为myorg/pushemail/model/EmailContent
的对象(用L表示)(以';'结尾)。
L和I字符用于表示Java内部类规范中的类名和整数。
这只是一个小问题,但我不认为这是名称混淆。名称混淆意味着向名称添加额外的内容。 ZBC 等只是 Java 在类文件中编码方法签名的方式。他们把 boolean 写成 Z,这样可以节省空间。
根据维基百科(标准免责声明适用),Java 中唯一涉及名称混淆的是内部类和 JNI。