質問

による 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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top