Construtor

11 respostas
edymrex

Vejam essa classe:

class Tipo 
{
	    Tipo(String texto) 
	    {
	       this(Integer.parseInt(texto));
	      System.out.println("Texto: " + texto);
	    }
	    Tipo(int valor) 
	    {
	       this("" + valor);
	      System.out.println("Valor " + valor);
	    }
}
public class Testes 
{
	
	
	
	 public static void main(String args[]) 
	   {
	     Tipo tipo = new Tipo("15");
	   }
}

Eu não posso ter construtor recursivo em Java ?

11 Respostas

robinsonbsilva

Você pode descrever melhor por que chamar “recursivamente um construtor”

:shock:

edymrex

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

Galera pelo o que eu verifiquei o compilador detecta loop infinito.
Olhei este questão no site da Caelum.

francislon

Os construtores estão chamando infinitamente um ao outro. Isto vai gerar um loop infinito.

Ricna

Não entendo por que você precisaria fazer isso.

Para resolver problemas como esse é que existe polimorfismo.

robinsonbsilva

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

Ricna

Você poderia até chamar outro construtor, mas sem recursividade.

Resumindo: Só pode chamar outro construtor, e somente caso este não o chame novamente.

public class Tipo {
    
    private int valor;
    public Tipo(String texto) {
        this(Integer.parseInt(texto));
        System.out.println("Texto: " + texto);
    }

    public Tipo(int valor) {
        this.valor = valor;
        System.out.println("Valor " + valor);
    }

    public static void main(String args[]) {
        Tipo tipo = new Tipo("15");
    }
}

Isso estaria correto. Mas ainda acho extremamente ínutil, pois já existe o polimorfismo.

peczenyj

Beleza, vc empilhou um monte de chamadas numa pilha de recursão e acabou a memória :slight_smile:

ViniGodoy

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

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

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…

Criado 16 de julho de 2008
Ultima resposta 16 de jul. de 2008
Respostas 11
Participantes 7