gpt4 book ai didi

java - 如何在编译时验证方法参数来自某个集合

转载 作者:行者123 更新时间:2023-12-01 18:59:55 28 4
gpt4 key购买 nike

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

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 个预定义值的方法。

我想在编译时进行检查,因为执行非常耗时。如果能早点完成检查就好了。任何指示表示赞赏。

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

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?其他?

最佳答案

如果您希望在编译时进行检查,则需要使用类型系统 - 特别是 boolean 对于只能是 true 的值假

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

关于java - 如何在编译时验证方法参数来自某个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12644768/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com