SORU
31 Mayıs 2010, PAZARTESİ


Java yorumlama.lang.NoSuchMethodError mesaj

Aşağıdaki çalışma zamanı hata iletisini (94 satırı gösteren bir yığın izleme ilk satırı ile birlikte). Böyle bir yöntem var diyor nedenini anlamaya çalışıyorum.

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 çizgi 94 aşağıda gösterilmiştir.

SORU
Ne demek" ya da "Z"? İLcom
Neden parantez içinde dört çeşit (İLcom/güneş/javadoc/ClassDoc;/güneş/javadoc/MemberDoc Lcom;Ljava/lang/String;Z) ve parantez sonra bir Ljava/lang/String; yöntem printDocLinkForMenu açıkça beş parametre vardır?

KOD DETAY
WriteSummaryLink yöntemi

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);
}

İşte 94 arıyor yöntem satır:

public void printDocLinkForMenu(int context, ClassDoc classDoc, MemberDoc doc,
        String label, boolean strong) {
    String docLink = getDocLink(context, classDoc, doc, label, strong);
    print(deleteParameterAnchors(docLink));
}

CEVAP
31 Mayıs 2010, PAZARTESİ


JVM Spec section 4.3.2:

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

section 4.3.3, Method descriptors:

Yöntem tanımlayıcı yöntem gereken parametreleri ve döndürdüğü değeri temsil eder:

MethodDescriptor:
        ( ParameterDescriptor* ) ReturnDescriptor

Böylece

(ILcom/sun/javadoc/ClassDoc;Lcom/sun/javadoc/MemberDoc;Ljava/lang/String;Z) Ljava/lang/String;

çeviren:

10*, ClassDoc, , * MemberDocString boolean String bir döndüren parametreleri, ve gibi bir yöntem. Sadece referans parametreleri noktalı virgül karakterini temsillerine bir parçası olduğu için noktalı virgül ile ayrılmış olduğunu unutmayın.


Yani, özetlemek gerekirse,

Neden orada dört çeşit ayraç (İLcom/güneş/javadoc/ClassDoc;Lcom/güneş/javadoc/MemberDoc;Ljava/lang/String;Z) ve sonra parantez Ljava/lang/String; zaman yöntemi printDocLinkForMenu açıkça beş parametreleri?

Beş parametreleri (int, ClassDoc, MemberDoc, String, boolean ve bir dönüş türü (Dize) vardır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amena

    Amena

    15 Kasım 2006
  • Breno Rises

    Breno Rises

    7 Ocak 2014
  • Fuse

    Fuse

    21 Kasım 2005