问题描述:
在写系统角色类时,因业务需要增加了一个是否为系统用户的标志位判定,在增加方法后出现了ReflectionException反射异常。
增加的成员方法代码:
/** 系统用户标志 */
private String systemRole;
/** 判断是否为系统用户 */
public boolean isSystemRole(return isSystemRole(this.systemRole));
public boolean isSystemRole(String systemRole){
systemRole!=null && UserConstants.SYSTEM_ROLE.equals(systemRole);
}
运行之后前端页面及控制台均出现了ReflectionException报错,因为JavaBean的gettter、setter一直都是用lombok直接@Data搞定的,所以就没考虑过getter可能会出现问题
前端页面
后端控制台
原因分析:
因为是正好增加了’isSystemRole()'这个方法之后和自身的getter方法出现了冲突,所以范围定义很明确。
具体原因就是,Java默认boolean类型的方法为isXXX或getXXX,所以在内部反射找方法的时候,无法区分是哪个方法。
也就是说下面这两个方法会出现ambiguous
public boolean isSystemRole();
public boolean getSystemRole();
解决方案:
网上查找了部分资料,都表示JDK8对这个问题没有什么更好的处理方式,现目前就是在成员方法返回类型为boolean的时候避免使用isXXX的形式,如
public boolean systemRoleValid() { return systemRoleValid(this.systemRole); }
public static boolean systemRoleValid(String systemRole) { return systemRole!=null && UserConstants.SYSTEM_ROLE.equals(systemRole);}
在添加`isSystemRole()`方法后,JavaBean出现ReflectionException。问题源于boolean类型getter方法与已有getter冲突。解决方案是避免使用`isXXX`形式的boolean getter。
19万+

被折叠的 条评论
为什么被折叠?



