class Type {

  @Override
  public boolean equals(Object other) {
    if (this == other) {
      return true;
    }
    if (!(other instanceof Type)) {
      return false;
    }
    Type that = (Type) other;
    return Objects.equals(key, that.getKey())
        && Objects.equals(value, that.getValue())
        && Objects.equals(min, that.getMin())
        && Objects.equals(max, that.getMax());
  }

  public  Type(BaseType key);
  public  Type(BaseType key, BaseType value, Long min, Long max);

}