@Override
  public boolean equals(Object o) {
    if (o == this) { return true; }
    if (o.getClass().equals(ArgHolder.class)) {
      ArgHolder<?> v = (ArgHolder<?>) o;
      boolean equal = getType().equals(v.getType());
      equal &= v.isSetValue() == isSetValue();
      if (equal && isSetValue()) {
        equal &= v.getValue().equals(getValue());
      }
      equal &= v.isSetDefaultValue() == isSetDefaultValue();
      if (equal && isSetDefaultValue()) {
        equal &= v.getDefaultValue().equals(getDefaultValue());
      }
      return equal;
    }
    return false;
  }