Skip to content

如何实现 EQ_OTHER_USE_OBJECT #17

@Xiaoven

Description

@Xiaoven

Eq: equals() method defined that doesn’t override Object.equals(Object) (EQ_OTHER_USE_OBJECT)

Examples

没找到
编译失败的写法
只要方法名、参数个数与顺序、参数类型与Object.equals方法相同,不管怎么改返回值和权限修饰符,都会编译失败。

boolean equals(Object obj)
public Boolean equals(Object obj)

报 EQ_SELF_USE_OBJECT:

class Custom{
    public boolean equals(Custom c){...}
}
实现思路

spotbugs 实现

- 变量解释
	- hasEqualsObject: 当方法满足 `public boolean equals(Object)` 时为 true,意为有正确重写Object类中的 equals 方法
	- hasEqualsSelf: equals 方法只有参数类型不满足标准写法,且参数是当前所在类类型而非Object类型时为 true
	- hasEqualsOther: 当参数类型为其他
	- usesDefaultEquals: 当该 equals 方法继承自 java.lang.Object,而不是其它 class 重新定义的

- 步骤:
	- !hasEqualsObject && !hasEqualsSelf && hasEqualsOther
	- usesDefaultEquals

对于参数类型,我们只能判断是否是 Object; 对于参数类型是所在类的情况,对应的是 EQ_SELF_USE_OBJECT pattern. 故决定暂时搁置该 pattern。

欢迎大家提出自己的想法。

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions