私のようにスーパークラスを持っている:私はスーパークラスの実装java.lang.Object getValue()
の両方を取得サブクラスでオーバーライドされたときにリフレクトを介して基本クラスのメソッドを取得するのはなぜですか?
Class clazz = MyClassImpl.class;
Method[] methods = clazz.getDeclaredMethods();
void setValue(java.lang.Object)
と:その後、私のようにAA特定の派生MyClassImpl
上の反射に
class MyClassImp extends MyClass<String> {
@Override
public void setValue(String value){
//insert code
}
@Override
public String getValue(){
return null;
}
}
を持って
class MyClass<T> {
public void setValue(T value){
//insert code
}
public T getValue(){
return null;
}
}
java.lang.String getValue()
,void setValue(java.lang.String)
。
Class.getDeclaredMethods()
のJavaドキュメントによればVIS-すなわち
このオブジェクトが表すクラスまたはインタフェースによって宣言されたすべてのメソッドを反映するMethodオブジェクトの配列を返します。これには、public、protected、default(パッケージ)アクセス、およびprivateメソッドが含まれますが、継承されたメソッドは除きます。返される配列の要素はソートされず、特定の順序ではありません。クラスまたはインタフェースがメソッドを宣言しない場合、またはこのClassオブジェクトがプリミティブ型、配列クラス、またはvoidを表す場合、このメソッドは長さ0の配列を返します。クラスの初期化メソッド
<clinit>
は、返される配列には含まれません。クラスが同じパラメータ型を持つ複数のパブリックメンバメソッドを宣言する場合、それらはすべて返された配列に含まれます。
なぜ私はスーパータイプの実装を取得していますか? 私には何かがありますか?
私が必要とするのは、基底クラスの実装で反射的にsetValue
を呼び出すことです。これには、特別な注釈コメントと追加の制約が追加されています。
http:// stackoverflowの重複がある可能性があります。com/questions/5756081/java-generics-reflection –
@RC:どのようにその質問の重複があるのかわかりません。 –
@RCこれは正確な複製ではありません – amod