我收到以下运行时错误消息(连同堆栈跟踪的第一行,它指向第 94 行)。我试图弄清楚为什么它说不存在这种方法。
java.lang.NoSuchMethodError:
com.sun.tools.doclets.formats.html.SubWriterHolderWriter.printDocLinkForMenu(
ILcom/sun/javadoc/ClassDoc;Lcom/sun/javadoc/MemberDoc;
Ljava/lang/String;Z)Ljava/lang/String;
at com.sun.tools.doclets.formats.html.AbstractExecutableMemberWriter.writeSummaryLink(
AbstractExecutableMemberWriter.java:94)
writeSummaryLink 的第 94 行如下所示。
问题
“ILcom”或“Z”是什么意思?
为什么括号里有四种类型
(ILcom/sun/javadoc/ClassDoc;Lcom/sun/javadoc/MemberDoc;Ljava/lang/String;Z)
和括号后面的一个
Ljava/语言/字符串;
当printDocLinkForMenu方法明明有五个参数的时候?
代码详情
writeSummaryLink 方法是:
protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
String name = emd.name();
writer.strong();
writer.printDocLinkForMenu(context, cd, (MemberDoc) emd, name, false); // 94
writer.strongEnd();
writer.displayLength = name.length();
writeParameters(emd, false);
}
这是第 94 行调用的方法:
public void printDocLinkForMenu(int context, ClassDoc classDoc, MemberDoc doc,
String label, boolean strong) {
String docLink = getDocLink(context, classDoc, doc, label, strong);
print(deleteParameterAnchors(docLink));
}
最佳答案
来自 section 4.3.2 JVM 规范:
Character Type Interpretation ------------------------------------------ B byte signed byte C char Unicode character D double double-precision floating-point value F float single-precision floating-point value I int integer J long long integer L<classname>; reference an instance of class S short signed short Z boolean true or false [ reference one array dimension
From section 4.3.3, Method descriptors:
A method descriptor represents the parameters that the method takes and the value that it returns:
MethodDescriptor:
( ParameterDescriptor* ) ReturnDescriptor
因此,
(ILcom/sun/javadoc/ClassDoc;Lcom/sun/javadoc/MemberDoc;Ljava/lang/String;Z)
Ljava/lang/String;
翻译为:
具有 int
、ClassDoc
、MemberDoc
、String
和 boolean
的方法作为参数,它返回一个 String
。请注意,只有引用参数用分号分隔,因为分号是其字符表示的一部分。
所以,总结一下:
Why there are four types in parentheses (ILcom/sun/javadoc/ClassDoc;Lcom/sun/javadoc/MemberDoc;Ljava/lang/String;Z) and one after the parentheses Ljava/lang/String; when the method printDocLinkForMenu clearly has five parameters?
有五个参数(int、ClassDoc、MemberDoc、String、boolean)和一种返回类型(String)。
关于java - 解释 java.lang.NoSuchMethodError 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2945862/