NullPointer

Olá

Estou com problema em um método do qual diz se uma variável genérica é null ou não retornando um boolean. Uma parte do meu código abaixo:

protected T var;

public boolean isEmpty() {
	if (this.var == null) {
		return true;
	} else{
		return false;
	}
}

Ele está em uma hierarquia, esse método tá na principal, eu testo e passa de boa, mas quando vou usar em uma classe que extends essa dai não funciona.

public SerVivo(T var) {
	this.var = var;
}

.

public class Animal<T> extends SerVivo<T>{
}   

public Animal(T var) {
	super(var);
}

Muitos outro métodos dependem dele, meu programa todo não tá funcionando. Criei o teste e o problema é sempre ele, java.lang.NullPointerException.

Acabei tirando nota baixa no projeto passado por causo do mesmo problema, não sei mais o que eu faço.

Posta o código completo de suas classes e do teste que você implementou.

1 curtida
public class SerVivo<T> {

protected T var;
		
public SerVivo(){
}

public SerVivo(T var) {
	this.var = var;
}

public boolean isEmpty() {
	return this.var == null;

}

public void inserir(T element) {
	if (element != null && !this.isEmpty()) {
		this.var = element;
	}	
}

public T getData() {
	return var;
}

public void setData(T data) {
	this.var = data;
}

}
public class Animal<T> extends SerVivo<T> {

protected int codigo;

public Animal(){
}

public Animal(T classe) {
	super(classe);
}

public void inserirCodigo(int codigo) {
	if (!this.isEmpty()) {
		this.codigo = codigo;
	}
}

public int getCodigo() {
	return codigo;
}

}

@Test
public void testIsEmpty() {
  primeiro = new Animal<Integer>();
  segundo = new Animal<Integer>();
  primeiro.inserir(5);
  Assert.assertFalse(primeiro.isEmpty());
  Assert.assertTrue(segundo.isEmpty());
}

O construtor padrão necessita de mais atenção do que o personalizado pois implica na necessidade de trabalhar com valores nulos.

Vide codificação semelhante:

//classe SerVivo

    import javax.swing.JOptionPane;

    public abstract class SerVivo<T> {

        private T tipo;

        public SerVivo() {
        }

        protected SerVivo(T tipo) throws NullPointerException {
            if (tipo == null) {
                throw new NullPointerException("O construtor utilizado não aceita null como parâmetro");
            }
            this.tipo = tipo;
        }

        public T getTipo() {
            return tipo;
        }

        protected void setTipo(T tipo) {
            if (isTipado()) {
                mensagem("Animal já tipificado: " + this.tipo + " [" + this.tipo.getClass().getSimpleName()
                        + "], a operação cancelada\n");
                return;
            }
            this.tipo = tipo;
        }

        protected boolean isTipado() {
            return tipo != null;
        }

        void mensagem(String msg) {
            JOptionPane.showMessageDialog(null, msg);
        }
    }

//classe Animal

public class Animal<T> extends SerVivo<T> {

    protected int codigo = Integer.MAX_VALUE;

    public Animal() {
    }

    public Animal(T classe, int codigo) {
        super(classe);
        this.codigo = codigo;
    }

    public void setCodigo(int codigo) {
        if (!isTipado()) {
            mensagem("Necessário tipificar o animal antes de codificar");
        }else{
            if (this.codigo != Integer.MAX_VALUE) {
                mensagem("Animal já codificado "+this.codigo);
            }else{
                this.codigo = codigo;
                mensagem("Codificação realizada ["+codigo+"] para "+getTipo()+" ["+getTipo().getClass().getSimpleName()+"]");
            }
        }
    }

    public int getCodigo() {
        return codigo;
    }

}

//classe de teste

public class Crisis {

    public static void main(String[] args) {
        testes();
    }

    public static void testes() {
        SerVivo<String> primeiro;
        SerVivo<Integer> segundo;
        SerVivo<Animal> animal1;
        primeiro = new Animal<>("Urso", 25);
        segundo = new Animal<>(14, 100);
        animal1 = new Animal<>();
        animal1.mensagem(animal1.getTipo()+ (animal1.isTipado() ? " Sim foi tipado" : " Aguardando tipar"));
        animal1.setTipo(new Animal());
        animal1.mensagem(animal1.getTipo()+(animal1.isTipado() ? " Sim foi tipado" : " Aguardando tipar " + animal1.getTipo().getClass()));
        primeiro.setTipo("Troll");
        segundo.setTipo(54);
        ((Animal) animal1).setCodigo(43);
        
        Animal<ArrayList<Animal>> relva = new Animal();
        System.out.println(relva.getTipo());
        relva.setTipo(new ArrayList<>());
                System.out.println(relva.isTipado()+" "+relva.getTipo().getClass().getSimpleName());    
    }

}