Voici un exemple de programme testé en Java 1.5.Exception lors de l'accès réfléchi à la classe interne
Je me demande pourquoi les deux approches ci-dessous ont un résultat différent. Est-ce un bug ou une sorte de fonctionnalité Java?
package test;
public class TestOut {
public static void main(String[] args) {
// works
new TestIn();
// throws IllegalAccessException
Class.forName("test.TestOut$TestIn").newInstance();
}
private static class TestIn {
}
}
Comment explicite 'new' fonctionne-t-il même s'il est' private'? – polygenelubricants
Je pense que parce que la réflexion élimine le contexte, et le contexte est que la classe interne appartient à l'extérieur. L'objet Class conserve lui-même la référence à la classe englobante, mais pas le constructeur. – Bozho
3x, Bozho. le "contexte" est ce que je me demande vraiment. À mon humble avis, le constructeur devrait avoir suffisamment d'informations pour connaître la classe enclsong, et il ne semble pas y avoir de bonne raison de l'implémenter de cette manière. – MikeJiang