我想知道你在比较两个字符串或构建一个Stringbuilder时是否遇到过这种问题。
正确性 - 调用equals()比较不同的类型 findbugs: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();
}
BTW我使用SonarQube工具得到了这个。不,我确定它正在比较两个String,所以我仍然没有线索,不仅我无法确定我在哪里失败,而且我也不知道问题是什么试图告诉我
我会一直在寻找,如果我发现它,我会发布它,仍然会感谢你的更多方法,谢谢。
答案 0 :(得分:0)
这些属性是什么类型的?
filtro.getUsuario()。getNombre() filtro.getMaterial()。的getId()
如果它们不是String类型,则不应通过equals进行比较。 但你可以做到以下几点:
Integer.valueOf(vacio).equals(filtro.getUsuario().getNombre())
因此,vacio的String值被强制转换为Integer,因此可以通过equals检查另一个Integer(getNombre())。