虽然 jdk 1.5 的文档中说不支持 template metaprogramming ,但是以下的例子还是很有趣的说。
package test;
public class GenericUsage {
/**
* 测试范型编程。
*
* @param <T>
* @param E
* @return
* @throws InstantiationException
* @throws IllegalAccessException
*/
public <T> T getObject(Class<? extends T> E) throws InstantiationException,
IllegalAccessException {
return E.newInstance();
}
}
package test;
import junit.framework.TestCase;
public class GenericUsageTest extends TestCase {
GenericUsage gu = new GenericUsage();
public void testGetObject() throws InstantiationException,
IllegalAccessException {
String str = gu.getObject(String.class);
assertNotNull(str);
}
}
例子中的方法,返回值是在运行时传入的。
调用者不需要再作转型了。
至于这样的方式能有什么用处?
正在思考中。