0

我有一个采用字符串参数(上传)的方法,它只能有两个值:真或假。有没有办法在编译时检查是否将正确的值传递给此方法?我尝试使用枚举,但就运行时检查而言:

public static enum eTrueFalse {TRUE, FALSE};
...

public Result loadSDP(String sdpFile, String name, String upload){
    StringBuilder sbOptionalParameters = new StringBuilder();
    if (upload != null){
        if (isTrueFalse(upload)){
            sbOptionalParameters.append(" --upload ");
            sbOptionalParameters.append(upload);
        } else {
            throw new IllegalArgumentException("The 'upload' parameter takes only 'true' or 'false' value.  Cannot handle: "
                    + upload);
        }
    }
    ...
}

private boolean isTrueFalse(String st) {
    for(eTrueFalse tf : eTrueFalse.values()){
        if(tf.name().equalsIgnoreCase(st)){
            return true;
        }
    }
    return false;
}

当然,这个问题也适用于具有超过 2 个预定义值的参数的方法。

我想在编译时进行检查,因为执行非常耗时。尽早完成检查会很棒。任何指针表示赞赏。

编辑: 上面的例子不是一个好例子,因为它可以很容易地用布尔(或布尔)解决,而我正在寻找一个更通用的解决方案。这是一个(希望)更好的例子。我有一个枚举:

public enum MEDIA_TYPE {XML, JSON};

以及采用它的方法:

public ClientResponse get(String address, String user,
        String password, MEDIA_TYPE mediaType) {
...
return webResource.queryParams(new 
        MultivaluedMapImpl()).accept(mediaType).get(ClientResponse.class);

}

上面的问题是accept方法需要String,所以我需要将我的枚举转换为String。最好的方法是什么?切换语句?向枚举类添加构造函数和getter?其他?

4

2 回答 2

4

如果您希望在编译时进行检查,那么您需要使用类型系统——特别boolean是对于只能是trueor的值false

但是,如果您有代码调用具有 String 字段的此方法,则任何转换都boolean只会在运行时发生,因此您无法验证Boolean.valueOf(str)在编译时不会引发异常。

于 2012-09-28T17:38:46.273 回答
0

如果上传变量只取真或假,实际上是一个布尔值。因此最好使用 Boolean 作为参数类,这将导致参数类的编译时类型检查。
当参数类仍然是字符串时,无法在编译时强制执行此类检查,因为字符串参数的值是在运行时评估的。

于 2012-09-28T18:11:41.253 回答