I tried to load classes with forName but some classes I tried to
loaded didn’t have a default constructor. That caused a
java.lang.NoClassDefFoundError which can’t be cought.
Se não houver um construtor default explícito, você não pode chamar Class.forInstance() para chamar o construtor default (explícito ou implícito) se houver um construtor que não é default e for explícito, já que nenhum construtor default implícito vai ser gerado pelo compilador nesse caso. Só que nesse caso você poderia ainda assim instanciar a classe, usando a classe Constructor que está disponível no pacote java.lang.reflect.
andrepestana
Obrigado por responder a minha pergunta, thingol!
Não entendí sua frase:
Poderia me explicar melhor?
grato,
Pestana
T
thingol
Class.forInstance() chama o construtor public (ou protected, ou package-private - depende da visibilidade) que não tiver parâmetro nenhum. Normalmente esse seria o construtor “default”.
O compilador habitualmente gera um construtor “default” - ele é normalmente:
publicSuaClasse(){super();}
Ele não gera o tal construtor se:
Você mesmo fez isso (definiu seu construtor sem parâmetros)
Não existe um construtor sem parâmetros na superclasse (ou seja, ele não consegue chamar “super”)
Você definiu outros construtores (mesmo que sejam com parâmetros), por exemplo: