1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Java, erro a fazer downcasting

Discussão em 'Programação' iniciada por Syk3r, 6 de Novembro de 2007. (Respostas: 10; Visualizações: 1100)

  1. Syk3r

    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.
     
  2. HecKel

    HecKel The WORM

    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.
     
  3. rj.rodrigues

    rj.rodrigues Power Member

    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: 6 de Novembro de 2007
  4. Syk3r

    Syk3r I quit My Job for Folding

    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.
     
  5. rj.rodrigues

    rj.rodrigues Power Member

    Então experimenta a minha sugestão.
     
  6. Syk3r

    Syk3r I quit My Job for Folding

    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:)
     
  7. HecKel

    HecKel The WORM

    Ao menos percebeste porque não funcionava fora do if?
     
  8. rj.rodrigues

    rj.rodrigues Power Member

    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
     
  9. theforbidden1

    theforbidden1 Banido

    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                 
        }
    
     
  10. Syk3r

    Syk3r I quit My Job for Folding

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

    theforbidden1 Banido

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

    Código:
    public int menor([COLOR=Magenta]Object obj[/COLOR])  
     

Partilhar esta Página