eclipse reclama por variável não inicializada  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Nesse código, o eclipse me obrigou a colocar o "=null" na declaração de tesoura e portico. Por que isso acontece? Não é a mesma coisa de não criar o objeto? No final do código eu tenho um if verificando se são null ou não.

Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Porque para o analizador léxico do Eclipse você pode estar tentando usar variáveis que ainda não foram instanciadas (veja o seu if sem else).

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Mesmo assim "não tem a ver" com o Eclipse, mas sim com a linguagem Java em sí. O compilador reclamaria pelo mesmo motivo.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Já fiz o else e mesmo assim reclama.
ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Mas por que iniciar com "=null" ? Isso não muda nada. Se antes ia acessar null, fazendo isso dá na mesma.
thingol
Moderador

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

Aham.

Quando você declara um membro de uma classe, ele é automaticamente inicializado com null, ou 0.
Quando você declara uma variável local, ela não é automaticamente inicializada com nada. Essa é uma diferença importante.
O problema é que, olhando pelo fluxo de seu programa, existe uma alternativa (pecaEstrutural instanceof Portico) onde "tesoura" não recebe valor nenhum. E depois dos ifs existe um logar onde se lê o valor de tesoura: if (tesoura != null)...
Provavelmente você deveria ter feito o seguinte: ter setado tesoura = null no if (pecaEstrutural instanceof Portico).
Há duas opiniões contrastantes:
- Uma delas diz que temos sempre de inicializar todas as variáveis locais com um valor conhecido, tal como null. Isso realmente "abafa" algum warning ou mensagem de erro do compilador.
- A outra diz que devemos inicializar o mínimo possível, e ver se ocorre a mensagem de erro de que a "variável não está inicializada". Essa opinião diz que o compilador pode ajudar-nos a encontrar erros de lógica, porque provavelmente não é que a variável não está inicializada - senão o default do Java seria inicializar tudo sempre - , mas sim que a lógica está incompleta em algum ponto, e esse erro na verdade é um aviso para você completar a sua lógica.
[WWW]
ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Realmente vou ter que deixar o =null.
Na minha lógica, ou tesoura ou portico vai ter que ficar obrigatoriamente setado com null.
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team