2010-12-13 13 views
1

リフレクションを使用してクラスの属性の値を変更することは可能です。リフレクションを使用して属性値を変更する方法

以下

は私のクラスである: -

public class LoggerManager { 

    private static LoggerManager _instance = new LoggerManager(); 

    private LoggerManager() { 
    } 

    public static LoggerManager getInstance() { 
      return _instance; 
    } 

    public Logger getLogger(String FQCN) { 
     Logger logger = Logger.getLogger(FQCN); 
     logger.setLevel(Level.INFO); 
     return logger; 
    } 
} 

私はリフレクションを使用して_instance変数の値を変更したい...

基本的に私は

_instance = new NewLoggerManager();に同じの値を変更したいです

が提供されていますNewLoggerManager extends LoggerManager

私はメソッドを呼び出す方法を知っていますが、どのようにdこれは..?

答えて

7
Field field = LoggerManager.class.getDeclaredField("_instance"); 
field.setAccessible(true); 
field.set(null, new NewLoggerManager()); 
  • 最初の行は_instanceフィールドのField定義を取得します。
  • フィールドが可視性のために不可能であっても、フィールドが反射的な操作のためにアクセス可能に設定されているため、「宣言された」メソッドを使用する。
  • 新しいオブジェクトを設定します。フィールドは、あなたがそのようにこれを実行する必要がある理由私は考えている、と基本的に@Bozhoは正しい答えをご提供してきたが、私は、このようなを避け提案したいstatic
0

あるので、ターゲットオブジェクトとしてnullを渡しますトラップ。この場合、依存関係注入を使用する方がよいでしょう。したがって、はるかに明確で素敵になり、あなたのために仕事をします。 GUICEについて読んでみてください。

関連する問題