java工具类该怎么写
-
命名以复数(s)结尾,或者以Utils结尾
如
Objects
、Collections
、IOUtils
、FileUtils
-
构造器私有化
构造器私有化,这样无法创建实例,也无法产生派生类
-
方法使用 static 修饰
因为构造器私有化了,那么对外提供的方法就属于类级别
-
异常需要抛出,不要 try-catch
将异常交给调用者处理
-
工具类不要打印日志
工具类属于公共的,所以不要有定制化日志
-
不要暴露可变属性
工具类属于公共类,所以不要暴露可变的属性;如List集合等(可以返回不可变的集合,或者拷贝一个暴露给调用者,这样调用者修改了集合中元素,不会影响到工具类中的集合元素)
示例(JDK中Arrays摘录典型部分):
public class Arrays {
/**
* The minimum array length below which a parallel sorting
* algorithm will not further partition the sorting task. Using
* smaller sizes typically results in memory contention across
* tasks that makes parallel speedups unlikely.
*/
private static final int MIN_ARRAY_SORT_GRAN = 1 << 13;
// Suppresses default constructor, ensuring non-instantiability.
private Arrays() {}
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
public static int[] copyOfRange(int[] original, int from, int to) {
int newLength = to - from;
if (newLength < 0)
throw new IllegalArgumentException(from + " > " + to);
int[] copy = new int[newLength];
System.arraycopy(original, from, copy, 0, Math.min(original.length - from, newLength));
return copy;
}
}