以下是其他人写的课程。
我面临的问题是,当parse method
与null as the rawString
进入时,它会抛出NumberFormatException
。
所以我想要做的是,我应该捕获NumberFormatException和set the value itself as null
。所以我的方式是对的?
public class ByteAttr {
@JExType(sequence = 1)
private Byte value;
public static ByteAttr parse(String rawString) {
ByteAttr attr = new ByteAttr();
try {
attr.setValue(Byte.valueOf(rawString));
} catch (NumberFormatException nfEx) {
attr.setValue(null);
}
return attr;
}
public Byte getValue() {
return this.value;
}
public void setValue(Byte value) {
this.value = value;
}
}
答案 0 :(得分:6)
正确的方法取决于您希望在程序中完成的任务。
ByteAttr.getValue()
稍后在您的计划中返回null
,那么您的方法可行。parse
)调用null
,则需要考虑是否应该抛出异常。另一种方法是捕获NumberFormatException
并抛出一个在程序中具有语义含义的异常。public static ByteAttr parse(String rawString) throws BadAttributeException { ByteAttr attr = new ByteAttr(); try { attr.setValue(Byte.valueOf(rawString)); } catch (NumberFormatException nfEx) { throw new BadAttributeException(nfEx); // wrap original exception } return attr; }
parse
无法解读的情况下将默认值传递给rawString
:public static ByteAttr parse(String rawString, Byte defaultValue) { ByteAttr attr = new ByteAttr(); try { attr.setValue(Byte.valueOf(rawString)); } catch (NumberFormatException nfEx) { attr.setValue(default); } return attr; }
答案 1 :(得分:2)
你需要做四件事:
我得到的印象,也许是不公平的,你已经直接跳到第4步,没有考虑可能的原因和正确的问题报告。
答案 2 :(得分:1)
您可以使用以下条件添加提前退出:
if (rawString != null) {
return attr; // or other value you prefer
}
您还可以确保parse方法的调用方测试null值,并避免在调用时调用parse。
答案 3 :(得分:0)
这取决于应用程序中空值的容差。如果您希望用户不将空字符串传递给parse()
方法,那么您应该进行防御性空检查并抛出异常。
if (null == rawString) {
throw new CustomException("rawString cannot be null");
}
同样适用于NumberFormatException的catch块,而不是将Byte属性的值静默设置为null,而应该使用适当的消息抛出异常。
但如果null
完全可以接受,那么您应该执行防御性空检查并将Byte属性设置为null。 NoFormatException肯定不会被抑制,恕我直言。