Por enquanto estou fazendo sem herança entre Tarefa e TarefaConcluída.
Mas acho que o correto seria usar herança, não é?
mauricioadl
Não eh so escrever o metodo compareTo?. Nao coloque o implements Comparable na filha, pois ela ja eh comparable por seu pai
[]'s
DavidUser
O mauricioadl disse tudo, não faz nem mesmo sentido o segundo implements em TarefaConcluida.
Dica:
Se as classes Tarefa e TarefaConcluida tiverem as mesma funcionalidade (a única diferença real é o tipo) é a hora de repensar a modelagem, você pode por exemplo incluir um atributo para especificar o estado do objeto Tarefa, isso se as próprias estruturas não fazem o trabalho de organizar os estados, cuidado com a repetição.
allexandrejr
mauricioadl, se eu não colocar o implements na filha, qdo tento declarar um atributo do tipo TarefaConcluída o java diz que ela não implementa o comparable.
Bom, acho que, nessa situação, realmente não dá pra usar herança.
É um exercício de Estrutura de Dados. E o prof pediu que houvesse as duas classes.
Vou deixá-las sem herança mesmo.
Agradeço a ajuda de todos.
DavidUser
O problema fica então com o uso de generics na sua lista, um modo de contornar segue no exemplo:
classListaEncOrd<T>{LinkedList<Comparable<Object>>list;publicvoidadd(Comparable<Object>item){list.add(item);}}classTarefaimplementsComparable<Object>{protectedStringdescription="";@OverridepublicintcompareTo(Objecto){if(oinstanceofTarefa)returndescription.compareTo(((Tarefa)o).description);elsethrownewInvalidParameterException();}}classTarefaConcluidaextendsTarefa{}publicclassMain{/** * @param args */publicstaticvoidmain(String[]args){// TODO Auto-generated method stubListaEncOrd<Tarefa>tarefas=newListaEncOrd<Tarefa>();tarefas.add(newTarefa());tarefas.add(newTarefa());ListaEncOrd<TarefaConcluida>tarefasConcluidas=newListaEncOrd<TarefaConcluida>();tarefasConcluidas.add(newTarefaConcluida());tarefasConcluidas.add(newTarefaConcluida());}}
DavidUser
Ainda sim pelo que foi passado não vejo necessidade para o uso de Generics para criação da sua coleção:
importjava.security.InvalidParameterException;importjava.util.LinkedList;classListaEncOrd{LinkedList<Comparable<Object>>list;publicListaEncOrd(){list=newLinkedList<Comparable<Object>>();}publicvoidadd(Comparable<Object>item){list.add(item);}}classTarefaimplementsComparable<Object>{protectedStringdescription="";@OverridepublicintcompareTo(Objecto){if(oinstanceofTarefa)returndescription.compareTo(((Tarefa)o).description);elsethrownewInvalidParameterException();}}classTarefaConcluidaextendsTarefa{@OverridepublicintcompareTo(Objecto){if(oinstanceofTarefaConcluida)returnsuper.compareTo(o);elseif(oinstanceofTarefa)return-1;elsethrownewInvalidParameterException();}}publicclassMain{/** * @param args */publicstaticvoidmain(String[]args){// TODO Auto-generated method stubListaEncOrdtarefas=newListaEncOrd();tarefas.add(newTarefa());tarefas.add(newTarefa());ListaEncOrdtarefasConcluidas=newListaEncOrd();tarefasConcluidas.add(newTarefaConcluida());tarefasConcluidas.add(newTarefaConcluida());}}
DavidUser
Ainda pode resolver o problema definido o tipo básico com que a sua Coleção pode trabalhar ao invés de utilizar Object, definido no lugar de Object o tipo básico.
Se todos tipos com que a sua coleção pode trabalhar são tarefas (Tarefa e suas extensões), ficaria algo assim:
importjava.util.LinkedList;classListaEncOrd{LinkedList<Comparable<Tarefa>>list;publicListaEncOrd(){list=newLinkedList<Comparable<Tarefa>>();}publicvoidadd(Comparable<Tarefa>o){list.add(o);}}classTarefaimplementsComparable<Tarefa>{protectedStringdescription="";@OverridepublicintcompareTo(Tarefao){returndescription.compareTo(((Tarefa)o).description);}}classTarefaConcluidaextendsTarefa{@OverridepublicintcompareTo(Tarefao){if(oinstanceofTarefaConcluida)returnsuper.compareTo(o);elsereturn-1;//as que nao sao TarefaConcluida devem ser antecessoras}}publicclassMain{/** * @param args */publicstaticvoidmain(String[]args){// TODO Auto-generated method stubListaEncOrdtarefas=newListaEncOrd();tarefas.add(newTarefa());tarefas.add(newTarefa());ListaEncOrdtarefasConcluidas=newListaEncOrd();tarefasConcluidas.add(newTarefaConcluida());tarefasConcluidas.add(newTarefaConcluida());}}