我必须在对象中进行特定排序。我阅读了很多教程并使用了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>>
任何人都知道如何解决它?
答案 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帮我解决了这个问题。