Frage

Nach http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#getDeclaredMethods%28%29 , Class.getDeclaredMethods () sollte nur schließen Verfahren „, erklärte von die Klasse". Allerdings bin ich ein paar ziemlich überraschende Ergebnisse mit dem Testcode immer unter:

import java.util.Arrays;

class A {
 public static A m1() { return null; }
 public static A m2() { return null; }
 public static A m3() { return null; }
}

class B extends A {
 public static A m1() { return null; }
 public static B m2() { return null; }
// public static Object m3() { return null; } won't compile
}


public class Scratch {
 public static void main(final String[] args) {
  System.out.println(Arrays.asList(B.class.getDeclaredMethods()));
 }
}

Ein paar Dinge, die ziemlich seltsam aussehen / raschend zu mir:

  • Der Compiler beschweren sich über B.m3 () eine inkompatible Rückgabetyp mit A.m3 mit (). Dies wird durch JSL 8.4.8.3 (Seite 225 v3 langspec-3.0.pdf) diktiert. Aber ich bin neugierig, warum diese Beschränkung auf statische Methoden anwenden muss. Mein Verständnis ist, dass statische Methoden versteckt werden kann und nicht außer Kraft gesetzt, und dass die Referenz bei der Kompilierung aufgelöst, so was ist der Grund für diese Einschränkung?

  • Zwei m2 () Methoden sind in der Ausgabe enthalten. Dies scheint die Behauptung widerlegen, dass getDeclaredMethods () nur kehrt Methoden „der Klasse deklariert“ und „schließt geerbten Methoden“. Ich sehe nicht, A.m2 () als B "durch erklärt".

  • Eine m1 () in der Ausgabe enthalten. Nach dem vorherigen Punkt, wenn es Sinn macht getDeclaredMethods () gibt zwei m2 () zu lassen, warum es nicht zurückgeben zwei m1 () als auch? Sie sind nach allen zwei verschiedene Methoden, und man wird von dem anderen versteckt. Ich sehe keinen fundemental Unterschied zwischen dem Fall von m1 () und m2 () mit Ausnahme der Art Rückkehr das gleiches im Fall von m1 () zu sein, aber der Rückgabetyp wie ich verstehe, ist nicht Teil der Signatur der Methode

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Siehe http://bugs.sun.com/bugdatabase/view_bug.do ? bug_id = 6815786

Auch wenn es gegen 1.6.0_12-b04 am 2009-03-11 05 gemeldet worden war: 44: 57.0  aber Sun nahm es auf 2010-07-22 01: 25: 56.0

in Kürze:

Überblick (reflektieren) Class.getDeclaredMethods () geerbten Methoden ist Zurückkehren

Kategorie java: classes_lang

Berichtet Vor

Staat 3-Akzeptiert, Fehler

Priorität: 3-Medium

Senden Datum 11-MAR-2009

Umgehen N / A

Evaluation wird untersucht.

Datum der Veröffentlichung: 2010-07-22 01: 25: 56.0

Andere Tipps

kann ich bestätigen, dass der Bug http://bugs.sun.com/ bugdatabase / view_bug.do? bug_id = 6815786 1.6.0_35 noch in Oracle Java Windows 64-Bit ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top