我写了这个将要设置的功能 val = max或min(如果val为null) 或val = val(val表示为整数或“max”或“min”)
在调用时我可能发送checkValue(val,“min”)或checkValue(val,“max”)
public String checkValue(String val,String valType)
{
System.out.println("outside if val="+val);
if(!val.equals("min") && !val.equals("max"))
{
System.out.println("Inside if val="+val);
try{
System.out.println("*Inside try val="+val);
Integer.parseInt(val);
}
catch(NumberFormatException nFE)
{
System.out.println("***In catch val="+val);
val=valType;
}
return val;
}
else
{
return val;
}
}
但问题是val是否为null 如果* * ** * * val = null 显示。 可以告诉我这是一个逻辑错误吗? 为什么我会纠正?
答案 0 :(得分:4)
如果val
为空,则表达式val.equals("min")
将抛出异常。
您可以使用以下方法更正此问题:
if (!"min".equals(val) && !"max".equals(val))
让它进入if
区块......但我会在方法开始时亲自处理它:
if (val == null) {
// Do whatever you want
}
顺便说一下,为了便于阅读,您可能需要考虑在代码中添加更多的空格......目前它非常密集,这使得它更难阅读。
答案 1 :(得分:3)
...问题是,如果显示* * ** val = null,则val返回null。可以告诉我这是一个合乎逻辑的错误吗?
输出正确;你是否希望它以这种方式出现取决于你。
下一行行
if(!val.equals("min") && !val.equals("max")){
...会抛出NullPointerException
,因为您试图取消引用val
,即null
。您需要添加显式检查val
是否为null:
if (val == null) {
// Do what you want to do when val == null
}
答案 2 :(得分:1)
你应该使用valType而不是val来检查最小值或最大值是否需要检查。
在这种情况下,我建议您使用布尔值或枚举而不是字符串。考虑类似的事情:
/**
* check the value for minimum if min is true and for maximum otherwise
*/
public String checkValue(String val, boolean min){
if (min) {
// ...
} else {
// ...
}
}
答案 3 :(得分:1)
如果你需要将字符串与常量进行比较,你应该反过来写它以使其为空安全:
if (! "min".equals(val))
虽然这主要是一个样式问题,但我会创建所有方法参数final
而不重新分配它们(因为这很令人困惑),你也可以从方法中返回,而不仅仅是结束。或者,如果您想在最后返回,请在最后执行,而不是在return
和if
分支中使用相同的else
语句。