11

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

myorg.vignettemodules.customregistration.NewsCategoryVPDAO.getEmailContentByID(I)Lmyorg/pushmail/model/EmailContent;

(I)L”是什么意思?

4

4 回答 4

20

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

  • Zboolean
  • Bbyte
  • Cchar
  • Sshort
  • Iint
  • Jlong
  • Ffloat
  • Ddouble
  • L全限定类名 ;:全限定类
  • [ type :类型数组
  • Vvoid

因此,在您的情况下,这(I)Lmyorg/pushemail/model/EmailContent;意味着该方法采用一个 type 参数int并返回一个 type 对象myorg.pushemail.model.EmailContent

于 2008-12-10T19:59:38.160 回答
16

这意味着该方法需要一个int, 并返回myorg.pushemail.model.EmailContent

从“L”到“;”的字符串 是一种类型描述符,用于返回类型。括号内的东西是方法参数(在这种情况下,只有一个)。

这些类型描述符被定义为 Java 虚拟机规范的一部分,在4.3.2 节中。表 4.3-A显示了所有使用的代码。当一个类被编译时,这种形式的描述符用于指定方法的签名以及字段和变量的类型。

在 Java 序列化中,方法描述符是经过散列以形成类默认值的信息的一部分serialVersionUIDSerializable

在 RMI 中,方法描述符被散列,结果用于识别远程接口中正在调用的方法。

于 2008-12-10T19:51:03.607 回答
0

这是一个小问题,但我不认为这是名称修改。名称修饰意味着在名称中添加额外的东西。ZBC 等就是 java 在类文件中编码方法签名的方式。他们没有写布尔值,而是写了一个 Z。这样可以节省空间。

根据维基百科(标准免责声明适用),java 中唯一的名称修饰涉及内部类和 JNI。

于 2010-04-01T10:11:09.190 回答
0

myorg.vignettemodules.customregistration.NewsCategoryVAPDAO它说,在被调用的类中没有方法getEmailContentByID接受int参数[由 (I) 表示] 并返回一个被称为myorg/pushemail/model/EmailContent(由“;”关闭) 的对象(由 L 宣布)。

L 和 I 字符用于表示 Java 内部类规范中的类名和整数。

于 2016-01-13T07:29:16.277 回答