getDeclaredMethods()および隠れたスーパークラスのstaticメソッド
-
28-09-2019 - |
質問
による http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#getDeclaredMethods%28%29,クラスです。getDeclaredMethods()だけを含む方法"を宣言したのです。しかし、いくつかの驚きの結果の試験は以下のコード:
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()));
}
}
いくつかの見える不思議な縁/驚くれた。
のコンパイラに関して不満B.m3()と互換性のない戻り値の型とA m3().この互JSL8.4.8.3(225ページv3langspec-3.0です。いただきます。私は、こうした興味のある人は、なぜこの制限必要が静ます。私の理解では、staticメソッドを非表示にできないオーバーライドし、その参照が解決されてコンパイル時に、その背後にあるこの制限?
二m2()メソッドの出力に出力します。これと矛盾なるよう求めているgetDeclaredMethods()だけを返す方法"を宣言したクラス"、"排除を継承法"へとシフトしていきました。と思いますかA.m2()"として宣言されたよ"B.
一m1()の出力に出力します。以前はこれにしようgetDeclaredMethods()を返し二m2)、なぜ、返還も行わないものとしますにつm1()でも見ることができますか?その後のすべての二つの方法は、隠されてしまうのです。いと思われfundemental差のm1、m2()の戻り値の型が同一の場合にはm1()の戻り値の型として理解していない一部のメソッドシグニチャー?
感謝。
解決
見 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6815786
ものの報告に対し1.6.0_12-b04に2009-03-11 05:44:57.0 が日受付で2010-07-22 01:25:56.0
概要:
概要 (reflect)クラスです。getDeclaredMethods()が返継承メソッド
カテゴリ java:classes_lang
報告 対
状態 3受け入れられ、バグ
優先順位 3-中
提出日時 11月-2009年
周辺) N/A
評価 ますのでお試しいただけます。
投稿日時: 2010-07-22 01:25:56.0
他のヒント
が確認できるバグを修正 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6815786 まだ存在していOracle Java Windows64bit1.6.0_35.