如何将第三方类对象用作Hashmap键?

Dan*_*ush 6 java oop hashmap

好的,我理解equals和hashcode的工作原理以及它们在hashmap中的使用方式.但是这个问题在我脑海中浮现,如果我有一个没有覆盖哈希码和等号的第三方对象,我甚至不允许修改它.

考虑以下课程:

//Unmodifiable class
public final class WannaBeKey{

    private String id;

    private String keyName;

    //Can be many more fields

    public String getId()
    {
          return id;
    }

    public String getKeyName()
    {
          return id;
    }
    //no hashcode or equals :(

  }
Run Code Online (Sandbox Code Playgroud)

现在我想把这个类作为我的Hashmap键,显然它不会没有equals和hashcode.我想知道有没有办法处理这种情况?我无法想到任何我想到的事情.

谢谢.

Jas*_*ols 8

我之前遇到过这种情况,并通过为WannaBeKey创建一个包装器来解决这个问题:

public class WannaBeKeyWrapper {

  private final WannaBeKey key;


  public WannaBeKeyWrapper(WannaBeKey key) {
    this.key = key;
  } 

  public boolean equals(Object obj) {

    // Insert equality based on WannaBeKey
  }

  public int hashCode() {
    // Insert custom hashcode in accordance with http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()
  }
}
Run Code Online (Sandbox Code Playgroud)

显然,这改变你SetSet<WannaBeKey>Set<WannaBeKeyWrapper>,但你应该能够考虑到这一点.