Inner class e newInstance

Salvem,

  Me deparei com uma limitação estranha quanto a instanciação dinâmica de um objeto quando seu tipo é uma Inner Class, a JVM lança uma InstantiationException quando executa o método Class.newInstance(), segue o código :
public class Teste {
    
	public static void main(String[] args) {
        Teste teste = new Teste();
        teste.metodo();
	}
    
    private void metodo(){
        Class clazz = Inner.class;
        try{
            Inner inner = (Inner) clazz.newInstance();
        }catch( Exception e ){
            e.printStackTrace();   
        }
    }
    
    private class Inner{
    }
}
 Já tentei usar o Class,forName() com o nome binário ( Teste$Inner ) , mas tb não funcionou. 
 Pelo visto o Java não consegue fazer a ligação do inner object com o enclosing object quando usando newInstance().
 Já olhei na JLS e não achei nada a respeito.
 Alguém sabe contornar isso , ou me dizer o porquê ?

 Agradeço desde já.

Engrassado, pegando o contrutor e passando a classe outter como parametro, rola :smiley: :Fade-color :rainbowafro:

import java.lang.reflect.*;

public class Teste { 
    
   public static void main(String[] args) { 
        Teste teste = new Teste(); 
        teste.metodo(); 
   } 
    
    private void metodo(){ 
        // Class clazz = Inner.class; 
        Class clazz = getClass();
        try{ 
            // Inner inner = (Inner)clazz.getDeclaredClasses().newInstance(); 
            
            Class classes [] = clazz.getDeclaredClasses();
            System.out.println(" = > " + classes.length);
            Class innerClass = classes[0].getClassLoader().loadClass("samples.Teste$Inner");
            Teste outerInstance= new Teste();
            // Get the Constructor with no declared Parameter, remember to use
            // Teste.class not Object.class
            Constructor construct= innerClass.getConstructor(new Class[]{Teste.class});
            construct.newInstance( new Object[]{outerInstance});
            
        }catch( Exception e ){
            e.printStackTrace();
        }
    }
    
    class Inner{
        public Inner(){System.out.println("Sucesso!!!");}
    }
}

Kra valeu mesmo, este é o comportamento mais estranho que já ví no Java, não existe documentação sobre este constructor que recebe o outerclass, mas simplesmente funciona, segue o código um pouco mais simples :

import java.lang.reflect.*;

    public class Teste {
        
        public static void main(String[] args) {
            Teste teste = new Teste();
            teste.metodo();
        }
        
        private void metodo(){
            Class clazz = Inner.class;
            try{
                Constructor cons = clazz.getDeclaredConstructor( new Class[]{Teste.class});
                Inner inner = (Inner) cons.newInstance( new Object[]{this});
            }catch( Exception e ){
                e.printStackTrace();
            }
        }
        
        class Inner{
            public Inner(){System.out.println("Sucesso!!!");}
        }
    }
  Muito obrigado pela dica.