如果对象类型来自编译的 .class 文件,如何避免在 Set 中存储重复项?

问题描述

我正在尝试将对象存储在 Set 中以避免重复

正如此 topic 解释的那样,我需要@Override 两种方法hashCode()equals(Object obj)

我试图存储在上述 Set 中的对象类型来自编译的 .class 文件,它没有hashCode()equals(Object obj) 方法以及它在继承链上的父级(Object 除外)。

有没有办法将它们存储在 Set 中以避免重复

解决方法

如果你不能修改对象,那么你可以包装它们。

class EmployeeHolder {
  private final Employee employee;
  public int hashCode() { ... }
  public boolean equals(Object o) {
    if (!(o instanceof EmployeeHolder)) return false;
    ...
  }
}
Set<EmployeeHolder> set = new HashSet<>();