@Override
  public void parsePayload(final String str) throws ParseException {
    try {
      switch(getType()) {
        case BYTE:
          payload = (T) Byte.valueOf(str);
          break;
        case SHORT:
          payload = (T) Short.valueOf(str);
          break;
        case INT:
          payload = (T) Integer.valueOf(str);
          break;
        case LONG:
          payload = (T) Long.valueOf(str);
          break;
        case FLOAT:
          payload = (T) Float.valueOf(str);
          break;
        case DOUBLE:
          payload = (T) Double.valueOf(str);
          break;
        default:
          throw new InternalError("missing type? " + getType());
      }
    } catch(final NumberFormatException e) {
      throw new ParseException("invalid number", 0);
    }
    change();
  }