1

クラスの1つで静的HashMapオブジェクトにアクセスしたいと思います。この擬似コードは、私がどのようにそれを実行しようとしているのかを示しています。

public Class A
{
 public static HashMap<String,String> myMap;
 static
 {
  myMap.put("my key", "my value");
 }
}
...
public void myfunction(Class clazz)
{
 HashMap<String,String> myMap = clazz.getThatStaticMap();
}
...
myFunction(A.getClass());

の呼びかけgetThatStaticMap()は、私がどうしたらいいかわからない部分です。

実際のコードでは、クラスをパラメーターとして呼び出し、クラスのnewInstance()メソッドを使用して作成されmyfunctionたオブジェクトを返しています ArrayListが、クラスに属する静的データにアクセスして各インスタンスを構成したいと考えています。

4

3 に答える 3

5

私があなたを正しく理解していれば、リフレクションを使用してフィールドにアクセスしたいと考えています。次のように、 Class#getFieldまたはClass#getDeclaredFieldを使用してマップにアクセスできます。

Field hashmapField = clazz.getField("myMap");
//Note, since this is static, we pass it null.
Object fieldValue = hashmapField.get(null);
HashMap<String,String> myMap = (HashMap<String,String>)fieldValue;

ただし、「myMap」フィールドを持つ予定のクラスが複数ある場合は、コードをリファクタリングして、次のようなインターフェースを持つことを検討してください。

public interface StringMappable{
  HashMap<String,String> getMap();
}

リフレクションを使用する代わりに。

于 2012-08-13T00:17:53.490 に答える
3

差出人:ここここ

clazz.getField("myMap").get(null)
于 2012-08-13T00:15:22.540 に答える
2

あなたはこのようなものが欲しいです:

public void myfunction(Class clazz)
{
    HashMap<String,String> myMap = clazz.getField("myMap").get(null);
}

メソッドのField.get(Object)ドキュメントによると

基になるフィールドが静的フィールドの場合、obj引数は無視されます。nullの可能性があります。

そして、Class.getField(String)メソッドのドキュメントは言う

このClassオブジェクトによって表されるクラスまたはインターフェイスの指定されたパブリックメンバーフィールドを反映するFieldオブジェクトを返します。nameパラメータは、目的のフィールドの単純な名前を指定する文字列です。

于 2012-08-13T00:14:51.043 に答える