class ValueWithDisplayString {

  @Override
  public boolean equals(Object other) {
    if (!(other instanceof ValueWithDisplayString)) {
      return false;
    }
    ValueWithDisplayString value = (ValueWithDisplayString)other;
    return Objects.equals(myValue, value.myValue) &&
           Objects.equals(myDisplayString, value.myDisplayString) &&
           Objects.equals(myHint, value.myHint);
  }

  public  ValueWithDisplayString(@Nullable String displayString, @Nullable String value);
  public  ValueWithDisplayString(@Nullable String displayString, @Nullable String value, @Nullable String hint);
  public  ValueWithDisplayString(@Nullable String displayString,
                                @Nullable String value,
                                @Nullable String hint,
                                @Nullable ValueSelector selector);

}