2010-12-13 7 views
1

est-il possible de changer la valeur d'un attribut d'une classe en utilisant la réflexion.comment modifier la valeur d'attribut en utilisant la réflexion

ci-dessous est ma classe: -

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; 
    } 
} 

je veux changer la valeur de _instance variable en utilisant la réflexion ..

essentiellement je veux changer la valeur du même à _instance = new NewLoggerManager();,

à condition que NewLoggerManager extends LoggerManager

est-il possible de le faire, comme je sais comment invoquer des méthodes, mais comment d o celui-ci .. ???

Répondre

7
Field field = LoggerManager.class.getDeclaredField("_instance"); 
field.setAccessible(true); 
field.set(null, new NewLoggerManager()); 
  • la première ligne obtient la définition Field pour le champ _instance. En utilisant la méthode "déclarée", car elle est aussi capable d'obtenir des champs privés
  • en réglant le champ pour être accessible pour les opérations réfléchissantes même si cela ne serait pas possible en raison de sa visibilité.
  • définir un nouvel objet. En passant null comme objet cible, car le champ est static
0

Je ne sais pas pourquoi vous avez besoin de le faire de cette façon, et essentiellement @Bozho ai fourni avec la réponse correcte, mais je voudrais suggérer d'éviter une telle pièges. Vous feriez mieux d'utiliser l'injection de dépendance dans ce cas, de sorte qu'il est devenu beaucoup plus clair et agréable et fera le travail pour vous. Essayez de lire environ GUICE.

Questions connexes