工具类的实现目标是:具有很强的通用性;能有较多的重载方法;尽量传递较少的参数;耦合度最好为零。随时,随地,方便的使用。
随时使用---因为用的比较多,可以考虑用static关键字修饰方法,使得方法在整个生命周期过程中一直处于加载状态,使用时不用重新加载。
随地使用---工具类的一个重要目标是给所有想用的,可能用到的人使用,所以一般的接口方法都设置成为public。
方便使用---方法的重载要做足,方法的参数不能太复杂,功能细致,这样的方法就更灵活,应用范围就更广。
可以为自己写一个工具类的包(可以打包成jar包),到哪里都可以用。
让我们看一下好的工具类具体是个什么样子?
java.lang.System是个很好的例子。
将System类定义为final类
public final class System
声明了一个私有的不带参数的构造方法,这样使得使用者不可以将System类进行实例化。
/** Don't let anyone instantiate this class */
private System() {
}
System类里只有public 和 private两种类型。Public是System对外提供的方法,private方法使其内部的实现更加结构合理。
除了上述的那个保护性的构造方法外,所有的方法,成员变量都是static的(private的方法也只有设置为static时,才能为public的static方法提供服务)。
public final static InputStream in = nullInputStream();
public final static PrintStream out = nullPrintStream();
public final static PrintStream err = nullPrintStream();
public static void setIn(InputStream in) {}
public static void setOut(PrintStream out) {}
public static void setErr(PrintStream err) {}
public static Channel inheritedChannel() throws IOException {}
public static
void setSecurityManager(final SecurityManager s) {}
public static SecurityManager getSecurityManager() {}
public static native long currentTimeMillis();
public static native long nanoTime();
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
public static Properties getProperties() {}
public static void setProperties(Properties props) {}
public static String getProperty(String key) {}
public static String getProperty(String key, String def) {}
public static String setProperty(String key, String value) {}
public static String clearProperty(String key) {}
public static String getenv(String name) {}
public static java.util.Map<String,String> getenv() {}
public static void exit(int status){}
public static void runFinalization() {}
public static void runFinalizersOnExit(boolean value) {}
public static void load(String filename) {}
public static void loadLibrary(String libname) {}
public static native String mapLibraryName(String libname);
public(除了private外)成员变量前添加final,使得效率更高。
其它一些注意事项:
不要将工具类写的过大。一般的应用只会用到工具类的部分方法,全部写在一起就会让过多的没有用到的方法也加载到内存,占用资源。所以在工具类中最好以功能分类,放在一个package下。打包成jar文件,提高适用性。当然也可以开源代码,发布在网上。