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

Java 这在堆栈跟踪中意味着什么?,java,exception,stack-trace,Java,Exception,Stack Trace,我在堆栈跟踪中看到: myorg.vignettemodules.customregistration.newscapegoryvapdao.getEmailContentByID(I)Lmyorg/pushemail/model/EmailContent “(I)L”是什么意思?它意味着该方法接受int,并返回myorg.pushemail.model.EmailContent 从“L”到“;”的字符串是一个类型描述符,用于返回类型。括号内的内容是方法参数(在本例中,只有一个) 在中,这些类型

我在堆栈跟踪中看到:

myorg.vignettemodules.customregistration.newscapegoryvapdao.getEmailContentByID(I)Lmyorg/pushemail/model/EmailContent


(I)L
”是什么意思?

它意味着该方法接受
int
,并返回
myorg.pushemail.model.EmailContent

从“L”到“;”的字符串是一个类型描述符,用于返回类型。括号内的内容是方法参数(在本例中,只有一个)

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

在Java序列化中,方法描述符是对
Serializable
类进行哈希处理的信息的一部分

在RMI中,方法描述符是散列的,结果用于在远程接口中进行排序。

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

  • Z
    boolean
  • B
    byte
  • C
    char
  • S
    short
  • I
    int
  • J
    long
  • F
    float
  • D
    double
  • L
    完全限定类名
    :完全限定类
  • [
    类型:类型的数组
  • V
    void

因此,在你的例子中,
(I)Lmyorg/pushemail/model/EmailContent;
意味着该方法接受一个类型为
int
的参数,并返回一个类型为
myorg.pushemail.model.EmailContent的对象。这是一个小点,但我不认为这是名称篡改。名称篡改意味着向名称添加额外的内容。ZBC等正是java编码方法signatu的方式类文件中的res。它们不写布尔值,而是放一个Z。这样可以节省空间


根据wikipedia(标准免责声明适用),java中唯一的名称混乱涉及内部类和JNI。

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


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

Sun网站上的某个地方记录了Java的名称损坏。有人应该查找它并从接受的答案链接到它。我只见过这个名称损坏与JNI一起使用;我从中得到的信息应该是对广告的评论阿姆罗森菲尔德的答案,不是答案本身。