这在堆栈跟踪中意味着什么?

时间:2008-12-10 19:48:49

标签: java exception stack-trace

我在堆栈跟踪中看到了这一点:

  

myorg.vignettemodules.customregistration.NewsCategoryVAPDAO.getEmailContentByID(I)Lmyorg / pushemail /模型/ EmailContent;

(I)L”是什么意思?

4 个答案:

答案 0 :(得分:20)

这是name mangling的一种形式,用于消除方法重载的歧义。方法名称附加了一系列描述参数和返回类型的字符:参数在括号内依次出现,返回类型在右括号后面。代码如下:

  • Zboolean
  • Bbyte
  • Cchar
  • Sshort
  • Iint
  • Jlong
  • Ffloat
  • Ddouble
  • L 完全合格的班级名称 ;:完全合格的班级
  • [ type type
  • 的数组
  • Vvoid

因此,在您的情况下,(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内部类规范中的类名和整数。