collections.sort出错

时间:2013-08-13 14:02:38

标签: java sorting collections interface comparable

你好吗?

我必须在对象中进行特定排序。我阅读了很多教程并使用了Comparable类。

我的班级:

public class PaAcao implements Serializable, IAcao, Comparable<PaAcao> /* Ordenar */  {

@Override
public int compareTo(PaAcao acaoCompara) {
    //return this.aresta - outro.aresta;
    int i = 0;
    String[] array1 = this.cnrAcao.split(".");
    String[] array2 = acaoCompara.cnrAcao.split(".");

    for(String c : array1){
        if (array2.length > i){             
            if (Integer.parseInt(c) > Integer.parseInt(array2[i])) 
            {
                return 1;
            }
            if (Integer.parseInt(c) < Integer.parseInt(array2[i])) 
            {
                return -1;
            }               
        }
        i++;
    }               
    return -1;
}  

对于这个班级,我有一个界面:

package br.com.agraria.qualidade.model.entity;

public interface IAcao{

    public abstract String getCnmUsuarResp();   
    public abstract Usuario getusuarResp();
    public abstract void setusuarResp(Usuario usuarResp);
    public abstract PaStatusAcao getIcdStatus();
    public abstract String getCnrAcao();
    public abstract Boolean getLpublico();

}

我得到以下错误:

public class PaAcaoServiceImpl extends HibernateGenericServiceImpl<PaAcao> implements PaAcaoService {
    @Override
    public List<? extends IAcao> processarAcoes(List<? extends IAcao> acoesProcessar) {
        SessaoPrivilegiosGerente sessaoPrivilegiosGerente = sessaoService.getSessaoPrivilegiosGerente();
        List<IAcao> macroRemover = new ArrayList<IAcao>();

        Collections.sort(acoesProcessar);

        ...

    }
}

问题出在 Collections.sort(acoesProcessar); 行中 我收到了消息:

  

绑定不匹配:类型集合的通用方法sort(List<T>)   不适用于参数(List<capture#14-of ? extends IAcao>)。推断类型capture#14-of ? extends IAcao不是   有效替代有界参数<T extends Comparable<? super T>>

任何人都知道如何解决它?

1 个答案:

答案 0 :(得分:0)

决议是:

在接口IAcao上扩展Comparable:

package br.com.agraria.qualidade.model.entity;

public interface IAcao extends Comparable<IAcao>{

    public abstract String getCnmUsuarResp();   
    public abstract Usuario getusuarResp();
    public abstract void setusuarResp(Usuario usuarResp);
    public abstract PaStatusAcao getIcdStatus();
    public abstract String getCnrAcao();
    public abstract Boolean getLpublico();

}

在我的班级PaAcao中,我删除了Comparable的工具,因为它将被复制并将类型os compareTo更改为IAcao而不是PaAcao:

public class PaAcao implements Serializable, IAcao /* Ordenar */  {

@Override
public int compareTo(IAcao acaoCompara) {
    //return this.aresta - outro.aresta;
    int i = 0;
    String[] array1 = this.cnrAcao.split(".");
    String[] array2 = acaoCompara.cnrAcao.split(".");

    for(String c : array1){
        if (array2.length > i){             
            if (Integer.parseInt(c) > Integer.parseInt(array2[i])) 
            {
                return 1;
            }
            if (Integer.parseInt(c) < Integer.parseInt(array2[i])) 
            {
                return -1;
            }               
        }
        i++;
    }               
    return -1;
}  

Tnxs @ Deactivator2帮我解决了这个问题。