Java, erro a fazer downcasting

Syk3r

I quit My Job for Folding
Código:
public boolean menor(Object obj)
    {
        if(obj instanceof Trabalhador)
           [I] Trabalhador t = (Trabalhador) obj;[/I]
        
        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.
 
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.
 
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
Código:
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

Código:
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
    }
 
Última edição:
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.
 
Código:
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:)
 
Código:
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
 
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...

Código:
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                 
    }
 
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 :)
 
Back
Topo