java.lang.NoClassDefFoundError  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
andrepestana
JavaEvangelist
[Avatar]

Membro desde: 23/03/2004 09:57:28
Mensagens: 380
Offline

Olá pessoal!

Gostaria de saber se a falta de um construtor default explícito numa classe pode causar java.lang.NoClassDefFoundError quando usamos reflexão.

Segundo:
http://groups.google.com/group/comp.lang.java.programmer/browse_thread/thread/21d6bb79c5f22c1d/8512a846a9c3f82d?lnk=st&q=Caused+by%3A+java.lang.NoClassDefFoundError%3A&rnum=3#8512a846a9c3f82d:

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.


Agradeço desde já!

Pestana

Pestana
http://andrepestana.wordpress.com/
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Esta classe clazz não pode ser instanciada, porque seu construtor é privado. Não importa se é por reflection ou não.



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.
[WWW]
andrepestana
JavaEvangelist
[Avatar]

Membro desde: 23/03/2004 09:57:28
Mensagens: 380
Offline

Obrigado por responder a minha pergunta, thingol!

Não entendí sua frase:
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.


Poderia me explicar melhor?

grato,

Pestana

Pestana
http://andrepestana.wordpress.com/
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

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:

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:

[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team