课堂讨论:
1. 对于 generate() 函数,如果本机名获取失败,函数返回什么?这样的返回值是否合理?
本机名获取失败时函数将返回null,是不合理的.除非特殊说明,否则上层调用者可能忽视null的存在,从而引发npe.
2. 对于 getLastFiledOfHostName() 函数,是否应该将 UnknownHostException 异常在函数内部吞掉(try-catch 并打印日志)?还是应该将异常继续往上抛出?如果往上抛出的话,是直接把 UnknownHostException 异常原封不动地抛出,还是封装成新的异常抛出?
首先,本人极端不愿使用Checked-Exception.异常在函数内部吞掉是不好的行为,因为发生异常时,上层调用者并不知道.除非经过妥善的处理,否则会影响业务的正常执行.
如果在使用CE的情况下,是一定要向上抛出的.视情况是否包装成新的异常:原始异常准确达意,调用者很容易理解就可以直接抛出,原始异常有歧义或可能导致调用者困惑,就应该封装成新的异常.
3. 对于 getLastSubstrSplittedByDot(String hostName) 函数,如果 hostName 为 NULL 或者是空字符串,这个函数应该返回什么?
先贴原始代码
@VisibleForTesting
protected String getLastSubstrSplittedByDot(String hostName) {
String[] tokens = hostName.split("\\.");
String substrOfHostName = tokens[tokens.length - 1];
return substrOfHostName;
}
原始情况下,会因为hostName为null产生的npe导致程序运行crash.可以为此函数添加一个用于校验 hostName合法的isHostNameValid()函数,在hostName非法时抛出运行时异常(Runtime-Exception),或在非法时返回代表非法的常量值.
4. 对于 generateRandomAlphameric(int length) 函数,如果 length 小于 0 或者等于 0,这个函数应该返回什么?
应该抛出运行时异常或返回代表非法的常量值.
展开