Jakob Jenkov 2014-06-23
Class 对象也可以在运行时用作类型说明。例如,你可以创建一个泛型方法,如下所示:
public static <T> T getInstance(Class<T> theClass)
throws IllegalAccessException, InstantiationException {
return theClass.newInstance();
}
以下是调用 getInstance() 方法的几个示例:
String string = getInstance(String.class);
MyClass myClass = getInstance(MyClass.class);
可以看到,返回类型会根据传入方法的 Class 对象参数而变化。这在数据库 API(例如 Butterfly Persistence)中非常有用,比如当你从数据库中读取对象时。
下面是一个 read() 方法的定义示例:
public static <T> T read(Class<T> theClass, String sql)
throws IllegalAccessException, InstantiationException {
// 执行 SQL 查询
T o = theClass.newInstance();
// 通过反射设置属性
return o;
}
你可以这样调用 read() 方法:
Driver employee = read(Driver.class, "select * from drivers where id=1");
Vehicle vehicle = read(Vehicle.class, "select * from vehicles where id=1");
是不是很巧妙?