我在堆栈跟踪中看到了这一点:
myorg.vignettemodules.customregistration.NewsCategoryVAPDAO.getEmailContentByID(I)Lmyorg / pushemail /模型/ EmailContent;
“(I)L
”是什么意思?
答案 0 :(得分:20)
这是name mangling的一种形式,用于消除方法重载的歧义。方法名称附加了一系列描述参数和返回类型的字符:参数在括号内依次出现,返回类型在右括号后面。代码如下:
Z
:boolean
B
:byte
C
:char
S
:short
I
:int
J
:long
F
:float
D
:double
L
完全合格的班级名称 ;
:完全合格的班级[
type : type V
:void
因此,在您的情况下,(I)Lmyorg/pushemail/model/EmailContent;
表示该方法采用类型为int
的一个参数,并返回类型为myorg.pushemail.model.EmailContent
的对象。
答案 1 :(得分:16)
这意味着该方法需要int
,并返回myorg.pushemail.model.EmailContent
从“L”到“;”的字符串是返回类型的一种类型描述符。括号内的东西是方法参数(在这种情况下,只有一个)。
这些类型描述符在section 4.3.2中被定义为Java虚拟机规范的一部分。 Table 4.3-A显示了所有使用的代码。编译类时,此表单的描述符用于指定方法的签名以及字段和变量的类型。
在Java序列化中,方法描述符是Serializable
类的form the default serialVersionUID
哈希信息的一部分。
在RMI中,方法描述符被散列,结果用于远程接口中的identify which method is being invoked。
答案 2 :(得分:0)
这是一个小问题,但我不认为这是名称错误。名称修改意味着在名称中添加额外的内容。 ZBC等是java编码类文件中方法签名的方式。他们没有写布尔值,而是放了Z.它节省了空间。
根据维基百科(标准免责声明适用),java中唯一的名称涉及内部类和JNI。
答案 3 :(得分:0)
它说,类myorg.vignettemodules.customregistration.NewsCategoryVAPDAO
中没有一个名为getEmailContentByID
的方法接受int
个参数[由(I)表示]并返回一个名为{的对象(由L公布){ {1}}(由';'关闭)。
L和I字符用于表示Java内部类规范中的类名和整数。