Java.lang.NullPointerException (RESOLVIDO)

8 respostas
L

Estou a ler o pdf fj11 da Caelum e não consigo correr uma classe de testes, já corri o código e as diferentes classes para tentar resolver o problema, mas nitidamente devo estar a atribuir mal qualquer coisa.

Tenho uma classe de teste: ...
public static void main(String[] args) {
		Employee e1 = new Employee();
		e1.name = "Xica";
		e1.salary = 1000;
		e1.bonifica(245);
		e1.admissionDate.day = 1;
		e1.admissionDate.month = 7;
		e1.admissionDate.year = 2010;
		e1.shows()
; ... Tenho a classe Employee: ...
public class Employee {

  public String name;

  public String department;

  public double salary;

  public Date admissionDate;
...com o método shows():
void shows(){
	  System.out.print("The employee with the name: "+this.name);
	  System.out.println(" belongs to the "+this.department+" with admission date of "+this.admissionDate+".");
	  System.out.println("Dia: " + admissionDate.day);
	  System.out.println("Mês: " + this.admissionDate.month);
	  System.out.println("Ano: " + this.admissionDate.year);
... sendo a classe Date, apenas:
public class Date {

		int day;
		int month;
		int year;
		
}

Quando o método shows() corre, nitidamente admissionDate é null.
Como/Onde devo iniciar correctamente?

8 Respostas

pmlm

A admissionDate também tem de ser inicializada.

ei.admissionDate = new Date();
e1.admissionDate.day = 1;
L

pmlm:
A admissionDate também tem de ser inicializada.

ei.admissionDate = new Date(); e1.admissionDate.day = 1;

:thumbup:
Muito obrigada, era mesmo isso.
(falta aqui um emoticon para fazer uma vénia :wink: )

pmlm

Eh eh eh

L

pmlm:

Eh eh eh


exacto

ViniGodoy

Outra opção é você mudar a criação do Date na classe Employee:

public class Employee {
   public String name;
   public String department;
   public double salary;
   public Date admissionDate = new Date();

...

Assim, todo employee criado já irá ter sua Date inicializada.

L
ViniGodoy:
Outra opção é você mudar a criação do Date na classe Employee:
public class Employee {
   public String name;
   public String department;
   public double salary;
   public Date admissionDate = new Date();

...

Assim, todo employee criado já irá ter sua Date inicializada.


Boa ideia, obrigada.

Até será mais correcto assim, não?
Em termos práticos, podemos ter um funcionário, que já é considerado funcionário para vários procedimentos, apesar de ainda não ter uma data de admissão (ex: a empresa ainda estar a criar o departamento...).

ViniGodoy

Você deve sempre projetar suas classes para serem difíceis de usar de maneira incorreta. Por isso a maneira que indiquei é melhor. Melhor ainda seria deixar os atributos privados, e criar um método setDataAdmissao, que proibisse alguém de inserir uma data inválida.

L

:thumbup: Muito obrigada pelas dicas, valeu :wink:

Criado 9 de agosto de 2010
Ultima resposta 9 de ago. de 2010
Respostas 8
Participantes 3