繁体   English   中英

声纳问题:正确性-调用equals()比较不同类型

[英]Sonar Issue: Correctness - Call to equals() comparing different types

我想知道您是否在比较两个String或构建Stringbuilder时是否遇到过此类问题。

正确性-比较不同类型的findbugs的equals()调用:EC_UNRELATED_TYPES此方法在不具有公共子类的不同类类型的两个引用上调用equals(Object)。 因此,被比较的对象在运行时不太可能是同一类的成员(除非未分析某些应用程序类,否则在运行时会发生动态类加载)。 根据equals()的约定,不同类的对象应始终比较为不相等; 因此,根据java.lang.Object.equals(Object)定义的约定,此比较的结果在运行时始终为false。

@SuppressWarnings("unchecked")
public List<MaterialUsuarioEO>buscar(FiltroMaterialUsuarioDto filtro){
    String vacio="";
    StringBuilder sb = new StringBuilder("Select mu from MaterialUsuarioEO mu where 1=1");

    if (filtro.getMaterial() != null && !vacio.equals(filtro.getMaterial().getId())) {
        sb.append("and upper(mu.material.id) like :id ");
    }
    if (filtro.getUsuario() != null && !vacio.equals(filtro.getUsuario().getNombre())) {
        sb.append("and upper(mu.usuario.nombre) like :nombre ");
    }

    Query q = em.createQuery(sb.toString());

    if (filtro.getMaterial() != null && !"".equals(filtro.getMaterial().getId())) {
        q.setParameter("id", "%" + filtro.getMaterial().getId().toUpperCase() + "%");
    }
    if (filtro.getUsuario() != null && !"".equals(filtro.getUsuario().getNombre())) {
        q.setParameter("nombre", "%" + filtro.getUsuario().getNombre().toUpperCase() + "%");
    }

    return q.getResultList();

}

顺便说一句,我使用SonarQube工具得到了这个。 而且,不,我确定它正在比较两个String,所以我仍然没有任何线索,不仅我无法确定失败的原因,而且我也不知道问题在试图告诉我什么。

同时,我将继续寻找,如果找到它,我将其发布,仍然要感谢您的其他方法,谢谢。

这些属性是哪种类型?

filtro.getUsuario()。getNombre()filtro.getMaterial()。getId()

如果它们不是String类型,则不应通过equals比较它们。 但是您可以执行以下操作:

Integer.valueOf(vacio).equals(filtro.getUsuario().getNombre())

因此,vacio的String值被转换为Integer,因此可以通过equals与另一个Integer(getNombre())进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM