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