1、定义自己的工具类,尽量不要在业务代码里面直接调用第三方的工具类。
直接调用第三方工具类有两个不好的地方
不同的人会使用不同的第三方工具库,会比较乱。
将来万一要修改工具类的实现逻辑会很痛苦。
最佳实践
public static boolean isEmpty(CharSequence cs) {
return org.apache.commons.lang3.StringUtils.isEmpty(cs);
}
public void copyAttribute(Object source, Object dest) {
org.springframework.beans.BeanUtils.copyProperties(source, dest);
}
2、参数类型使用父类/接口
举例,假设我们写了一个判断arraylist是否为空的函数,一开始是这样的。
public static boolean isEmpty(ArrayList<?> list) {
return list == null || list.size() == 0;
}
我们看到我们只用了size方法,我们可以知道size方法再list接口上有,size方法再list的父类/接口Collection上也有,Collection没有父类/接口有size方法了,修改就结束了。
最佳实践
public static boolean isEmpty(Collection<?> collection) {
return collection == null || collection.size() == 0;
}
思路是抽象的思想,主要是修改参数类型,方法就是往上找父类/接口,一直找到顶为止,记得修改参数名。
3、使用重载编写衍生函数组
举例,现在需要编写一个方法,输入是一个utf-8格式的文件的文件名,把里面内容输出到一个list<String>。我们刚刚开始编写的时候,是这个样子的
public static List<String> readFile2List(String filename) throws IOException {
List<String> list = new ArrayList<String>();
File file = new File(filename);
FileInputStream fileInputStream = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fileInputStream,
"UTF-8"));
// XXX操作
return list;
}
最佳实践
private static final String DEFAULT_CHARSET = "UTF-8";
public static List<String> readFile2List(String filename) throws IOException {
return readFile2List(filename, DEFAULT_CHARSET);
}
public static List<String> readFile2List(String filename, String charset)
throws IOException {
FileInputStream fileInputStream = new FileInputStream(filename);
return readFile2List(fileInputStream, charset);
}
public static List<String> readFile2List(File file) throws IOException {
return readFile2List(file, DEFAULT_CHARSET);
}
public static List<String> readFile2List(File file, String charset)
throws IOException {
FileInputStream fileInputStream = new FileInputStream(file);
return readFile2List(fileInputStream, charset);
}
public static List<String> readFile2List(InputStream fileInputStream)
throws IOException {
return readFile2List(fileInputStream, DEFAULT_CHARSET);
}
public static List<String> readFile2List(InputStream inputStream, String charset)
throws IOException {
List<String> list = new ArrayList<String>();
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(inputStream, charset));
String s = null;
while ((s = br.readLine()) != null) {
list.add(s);
}
} finally {
IOUtils.closeQuietly(br);
}
return list;
}
关键点,多想一步,根据参数变化编写各种类型的入参函数,需要保证函数主要代码只有一份。
总之编写工具类的时候需要注意参数的优化
原文链接
我的编码习惯 - 工具类规范