2

我有一个方法,我接受一个字符串,它可以是数字作为字符串或普通字符串。

public Builder setClientId(String clientId) {
    checkNotNull(clientId, "clientId cannot be null");
    checkArgument(clientId.length() > 0, "clientId can't be an empty string");
    this.clientId = clientId;
    return this;
}

现在我想添加一个检查,假设是否有人clientId作为负数"-12345"或零传递"0",那么我想解释这个并抛出IllegalArgumentException消息作为"clientid must not be negative or zero as a number"或可能是其他一些好消息。如果可能的话,我如何使用番石榴前提条件来做到这一点?

根据建议,我使用以下代码:

public Builder setClientId(String clientId) {
    checkNotNull(clientId, "clientId cannot be null");
    checkArgument(clientId.length() > 0, "clientId can't be an empty string");
    checkArgument(!clientid.matches("-\\d+|0"), "clientid must not be negative or zero");
    this.clientId = clientId;
    return this;
}

有没有更好的方法呢?

4

1 回答 1

2

我认为最简单的方法如下:

 public Builder setClientId(String clientId) {
    final Integer id = Ints.tryParse(clientId);
    checkArgument(id != null && id.intValue() > 0,
      "clientId must be a positive number, found: '%s'.", clientId);
    this.clientId = clientId;
    return this;
  }

调用此方法时,会给出:

.setClientId("+-2"); 
// java.lang.IllegalArgumentException: clientId must be a positive number, found: '+-2'.

.setClientId("-1"); 
// java.lang.IllegalArgumentException: clientId must be a positive number, found: '-1'.

.setClientId(null); 
// java.lang.NullPointerException

此代码使用Ints.tryParse. 来自 JavaDoc:

回报:

表示的整数值string,或者null如果string长度为零或不能被解析为整数值

此外,它会在收到aNullPointerException时抛出 a 。null


编辑:但是,如果允许任何其他字符串,则代码更改为:

public Builder setClientId(String clientId) {
    checkArgument(!Strings.isNullOrEmpty(clientId),
      "clientId may not be null or an empty string, found '%s'.", clientId);
    final Integer id = Ints.tryParse(clientId);
    if (id != null) {
      checkArgument(id.intValue() > 0,
        "clientId must be a positive number, found: '%s'.", clientId);
    }
    this.clientId = clientId;
    return this;
  }

此代码将接受严格正整数或非空且非空的所有字符串。

于 2016-01-20T08:41:30.183 回答