robinsonbsilva 16 de jul. de 2008
Você pode descrever melhor por que chamar “recursivamente um construtor”
:shock:
edymrex 16 de jul. de 2008
E soh olhar no código cara:
Tipo ( String texto )
{
this ( Integer . parseInt ( texto ));
System . out . println ( "Texto: " + texto );
}
Tipo ( int valor )
{
this ( "" + valor );
System . out . println ( "Valor " + valor );
}
quando eu coloco this ele me chama o construtor à qual a assinatura corresponde ao tipo passado, quando vou compilar é gerado um erro:
Recursive constructor invocation Tipo(int)
Recursive constructor invocation Tipo(String)
edymrex 16 de jul. de 2008
Galera pelo o que eu verifiquei o compilador detecta loop infinito.
Olhei este questão no site da Caelum.
francislon 16 de jul. de 2008
Os construtores estão chamando infinitamente um ao outro. Isto vai gerar um loop infinito.
robinsonbsilva 16 de jul. de 2008
Eu olhei o código postado, e não dava para ver de forma clara o erro que dá para vc!!!
Jovem isso não existe no javac do JDK 5.0 ele dá erro…
public class Tipo {
Tipo ( String texto ) {
this ( Integer . parseInt ( texto ));
System . out . println ( "Texto: " + texto );
}
Tipo ( int valor ) {
this ( "" + valor );
System . out . println ( "Valor " + valor );
}
}
veja:
http://www.guj.com.br/posts/list/68421.java
peczenyj 16 de jul. de 2008
Beleza, vc empilhou um monte de chamadas numa pilha de recursão e acabou a memória
ViniGodoy 16 de jul. de 2008
Não.
Como o this é obrigatoriamente a primeira linha do seu código, você não teria como acabar com a recursividade.
Além do mais, é uma péssima prática de programação chamar outros métodos que usem as variáveis do seu objeto antes dele estar completamente construído.
edymrex 16 de jul. de 2008
Vejam essa classe:
class Testes
{
public static void main ( String [] args ){
int contador = 5 ;
final int x = 5 ;
final int y ;
y = 6 ;
switch ( 5 ){
case x : contador ++ ;
case y : ++ contador ; break ;
default : contador ++ ; break ;
}
System . out . println ( contador );
}
}
O compilador me mostrou que o erro e na linha onde está a seguinte instrução:
case y: ++contador; break;
Mas porque não vejo lógica para isto.
sergiotaborda 16 de jul. de 2008
Puppets:
Eu não posso ter construtor recursivo em Java ?
Pode, mas não infinitamente recursivo … o seu seus construtores chama-se um ao outro infinitamente…