Quali sono i potenziali problemi che devo prestare attenzione quando si utilizza il riflesso. Sono molto confuso nella riflessione, perché java fornisce questo tipo di funzionalità per accedere ai dati privati membri.Privato è privato, quindi Perché java consente di accedere al metodo privato utilizzando la riflessione?
privato: Come ci avrei pensato, solo la classe in cui si è dichiarata può vederlo.
Allora perché è possibile accedere a cose private in altre classi? questa terminologia (riflessione) stravolge completamente il mio concetto di proprietà private (Access Specifier) in java.
Ho visitato molti collegamenti su questi argomenti ma non ho dato una spiegazione completa su questi argomenti. esempio:
package example;
import java.lang.reflect.Method;
class A{
private void privateMethod(){
System.out.println("hello privateMethod()");
}
}
class B{
public static void main(String[] args) throws Exception {
A d = new A();
Method m = A.class.getDeclaredMethod("privateMethod");
m.setAccessible(true);
m.invoke(d);
}
}
Quindi, per favore spiegare scenario di questo approccio in modo approfondito? Ho bisogno di vantaggi e svantaggi per l'accessibilità dei metodi privati in altre classi?
http://stackoverflow.com/questions/1239581/why-is-it-allowed-to-access-java-private-fields-via-reflection –
La maggior parte dei progetti regolari non dovrebbe richiedere alcuna riflessione, poiché se si hai semplicemente bisogno di ripensare alla tua architettura (ci sono ovviamente delle eccezioni). Un posto dove uso regolarmente la riflessione è in UnitTests. Puoi semplicemente provare più scenari modificando un campo privato usando la riflessione negli UnitTests. Ad esempio un booleano. Diciamo che hai un'impostazione booleana e vuoi testare entrambi gli scenari in un Test unitario. Il valore predefinito nel tuo progetto è falso, quindi per prima cosa testalo. E poi usi la riflessione per metterla (temporanea) su true e testare l'altro scenario. –
qualcuno può spiegare con un esempio? perché sarà molto chiaro sul mio concetto. –