Collections e tipos genericos

1 resposta
M

Prezados,

Estamos migrando nosso projeto aqui na empresa para o jdk 1.5 e nos deparamos com muitos “error” e “warning” relacionados à tipos genéricos. Não estamos conseguindo nos livrar destes aqui abaixo, se puderem nos ajudar agradecemos muito:

[color=darkblue]public class ErrorList extends Vector implements Serializable {
  …
}[/color]

[color=darkblue]public class ErrorHelper implements Serializable {
  …

  public void add(ErrorList errorList, String errNumber) throws Exception {

    Error error = newError(errNumber);

    Collections.sort( errorList , new ErrorComparator() );

if (Collections.binarySearch( errorList , error , new ErrorComparator() ) < 0 )

      errorList.add(error);

  }

  private class ErrorComparator implements Comparator {

    public int compare(Object o1, Object o2) {

      int ret = ((Error)o1).getNumber().compareTo(((Error)o2).getNumber());

if (ret == 0) {

        ret = ((Error)o1).getDescription().toLowerCase().compareTo(((Error)o2).getDescription().toLowerCase());

      }

      return ret;
    }

  }

  …
}[/color]

[color=red]    [javac] C:\svj\mvc_1_0_0\src\br\com\svj\mvc\ErrorHelper.java:92: warning: [unchecked] unchecked conversion

[javac] found   : br.com.svj.mvc.ErrorList

[javac] required: java.util.List

[javac]         Collections.sort( errorList , new ErrorComparator() );

[javac]                           ^

[javac] C:\svj\mvc_1_0_0\src\br\com\svj\mvc\ErrorHelper.java:92: warning: [unchecked] unchecked conversion

[javac] found   : br.com.svj.mvc.ErrorHelper.ErrorComparator

[javac] required: java.util.Comparator<? super T>

[javac]         Collections.sort( errorList , new ErrorComparator() );

[javac]                                       ^

[javac] C:\svj\mvc_1_0_0\src\br\com\svj\mvc\ErrorHelper.java:92: warning: [unchecked] unchecked method invocation: sort(java.util.List,java.util.Comparator<? super T>) in java.util.Collections is applied to (br.com.svj.mvc.ErrorList,br.com.svj.mvc.ErrorHelper.ErrorComparator)

[javac]         Collections.sort( errorList , new ErrorComparator() );

[javac]                         ^

[javac] C:\svj\mvc_1_0_0\src\br\com\svj\mvc\ErrorHelper.java:94: warning: [unchecked] unchecked conversion

[javac] found   : br.com.svj.mvc.ErrorList

[javac] required: java.util.List<? extends br.com.svj.mvc.Error>

[javac]         if (Collections.binarySearch( errorList , error , new ErrorComparator() ) < 0 )

[javac]                                       ^

[javac] C:\svj\mvc_1_0_0\src\br\com\svj\mvc\ErrorHelper.java:94: warning: [unchecked] unchecked conversion

[javac] found   : br.com.svj.mvc.ErrorHelper.ErrorComparator

[javac] required: java.util.Comparator<? super br.com.svj.mvc.Error>

[javac]         if (Collections.binarySearch( errorList , error , new ErrorComparator() ) < 0 )

[javac]                                                           ^

[javac] C:\svj\mvc_1_0_0\src\br\com\svj\mvc\ErrorHelper.java:94: warning: [unchecked] unchecked method invocation: binarySearch(java.util.List<? extends T>,T,java.util.Comparator<? super T>) in java.util.Collections is applied to (br.com.svj.mvc.ErrorList,br.com.svj.mvc.Error,br.com.svj.mvc.ErrorHelper.ErrorComparator)

[javac]         if (Collections.binarySearch( errorList , error , new ErrorComparator() ) < 0 )

[javac]                                     ^

[javac] C:\svj\mvc_1_0_0\src\br\com\svj\mvc\ErrorHelper.java:95: warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.Vector

[javac]             errorList.add(error);[/color]

1 Resposta

T

Eu não tenho seu código inteiro, então estou supondo que você criou uma classe bla.ble.bli.Error, em vez de reaproveitar a java.lang.Error (o que não se deve fazer para erros de aplicação).

// Estou supondo que sua ErrorList contém apenas e tão somente objetos do tipo Error
// e que Error não é a classe java.lang.Error, mas uma classe sua.
// Não use o nome Error - ele já é usado por java.lang.Error, e todos sabem
// que reaproveitar nomes de classes de java.lang dá muitos, muitos problemas.
// (Exercício: experimente criar uma classe chamada seupacote.String. 
// O que ocorre com seus programas?) 
// Qual é o problema com o velho e bom "Erro" em português?

public class Erro  ... {
}

// Não use Vector, use ArrayList, que costuma ser mais eficiente
public class ErrorList extends ArrayList&lt;Erro&gt; implements Serializable {
  ...
}

public class ErrorHelper implements Serializable {
  ...

  public void add(ErrorList errorList, String errNumber) throws Exception {

    Erro error = newError(errNumber);

    Collections.sort( errorList , new ErrorComparator() );

    if (Collections.binarySearch( errorList , error , new ErrorComparator() ) &lt 0 )
      errorList.add(error);
  }

  private class ErrorComparator implements Comparator&lt;Erro&gt; {

    public int compare(Erro o1, Erro o2) {

      int ret = o1.getNumber().compareTo(o2.getNumber());

      if (ret == 0) {
        ret = o1.getDescription().toLowerCase().compareTo(o2.getDescription().toLowerCase());
      }

      return ret;
    }

  }

  ...
}
Criado 29 de novembro de 2006
Ultima resposta 29 de nov. de 2006
Respostas 1
Participantes 2