View Full Version : Java, erro a fazer downcasting


Syk3r
06-11-2007, 18:31
public boolean menor(Object obj)
{
if(obj instanceof Trabalhador)
Trabalhador t = (Trabalhador) obj;

if(this.vencimento()<T.vencimento())
return true;
else return false;

}

A frase em itálico da-me erro. "Not a statement. ; expected."
Este método está na classe Trabalhador, sendo que esta implementa a interface Comparavel que contém apenas o cabeçalho do método.

HecKel
06-11-2007, 18:40
Não estou mesmo a ver que erro é esse, no entanto de realçar que tens um T.vencimento() a seguir, o Java é case sensitive, julgo que querias colocar t.vencimento(), e mesmo assim vai dar erro...

Como declaras a variável DENTRO de um if, ela SÓ existe dentro desse if, fora dele não existe. Recomendava-te a criares a variável fora do if, lá dentro fazes o casting, e depois usas normalmente no segundo if.

rj123
06-11-2007, 18:50
Bem se esse T for o t defenido tens ai bastantes erros, tb dava jeito saber o k keres fazer ai. mas aqui vai a minha tentativa
public boolean menor(Object obj)
{
if(obj instanceof Trabalhador){
Trabalhador t = (Trabalhador) obj;
if(this.vencimento()<t.vencimento())
return true;
else
return false;
}
System.out.println("Erro! N conseguiu converter o objecto");
System.out.exit(1); //erro n conseguiu converter o objecto e sai
}


alias assim ate estarias a gastar passos desnecessarios, assim estaria melhor

public boolean menor(Object obj)
{
if(obj instanceof Trabalhador){
if(this.vencimento()< ((Trabalhador) obj).vencimento())
return true;
else
return false;
}
System.out.println("Erro! N conseguiu converter o objecto");
System.out.exit(1); //erro n conseguiu converter o objecto e sai
}

Syk3r
06-11-2007, 19:10
O t já está maiúsculo. Ficou assim pq eu tive a testar com minúsculas e não mudei tudo outra vez:p
O objectivo disto é simples. Compara os vencimentos dois objectos Trabalhador e se um for maior do que outro retorna True, caso contrário retorna False. É muito simples mesmo.

rj123
06-11-2007, 19:13
Então experimenta a minha sugestão.

Syk3r
06-11-2007, 19:27
public boolean menor(Object obj)
{
if(obj instanceof Trabalhador)
{
Trabalhador T = (Trabalhador) obj;
if(this.vencimento()<T.vencimento())
return true;

}
return false;
}

Resolvi assim. Pus tudo dentro do if e resolveu-se.
Obrigado a todos pela ajuda:)

HecKel
06-11-2007, 19:28
Ao menos percebeste porque não funcionava fora do if?

rj123
06-11-2007, 19:34
public boolean menor(Object obj)
{
if(obj instanceof Trabalhador)
{
Trabalhador T = (Trabalhador) obj;
if(this.vencimento()<T.vencimento())
return true;

}
return false;
}

Resolvi assim. Pus tudo dentro do if e resolveu-se.
Obrigado a todos pela ajuda:)
Esse n é o melhor metodo, pois se chamares a funçao em k o objecto (parâmetro de entrada) n é do tipo Trabalhador, ele n vai dar erro, pois vai devolver false logo no if criando assim um bug.
Ou seja estas a assumir k se n for dakele tipo devolve falso em vez de erro

theforbidden1
06-11-2007, 20:02
Belo exercício á moda de PPROG no ISEP, não havia solução para isso no \\mafalda\dump1?
Eu acho que o vi lá "Javas" hoje...


public int menor(Object obj)
{
if(obj instanceof Trabalhador)
{
Trabalhador T = (Trabalhador) obj;
if(this.vencimento()<T.vencimento())
return 1; //true
else
return 0; //false
}
else
return -1; //não é possível comparar
}

Syk3r
11-11-2007, 17:22
Esse n é o melhor metodo, pois se chamares a funçao em k o objecto (parâmetro de entrada) n é do tipo Trabalhador, ele n vai dar erro, pois vai devolver false logo no if criando assim um bug.
Ou seja estas a assumir k se n for dakele tipo devolve falso em vez de erro

Para o que é serve. Sou eu que passo o objecto e tenho a certeza de que é trabalhador. Mas está bem visto, sim :)

theforbidden1
11-11-2007, 22:53
Para o que é serve. Sou eu que passo o objecto e tenho a certeza de que é trabalhador. Mas está bem visto, sim :)

Se fosse para teres a certeza que era do tipo trabalhador a assinatura do método não era assim:


public int menor(Object obj)