方法定义:
public <T> T creatNew(T bean) { return apiServer; } public <T> T creatNew1(Class<T> bean) throws IllegalAccessException, InstantiationException { return apiServer.newInstance(); } public <T> T creatNew2(Class<?> bean) throws IllegalAccessException, InstantiationException { return (T) apiServer.newInstance(); } public Object creatNew3(Class<?> apiServer) throws IllegalAccessException, InstantiationException { return apiServer.newInstance(); }
调用方式:
int aNew = creatNew(10); try { String bNew = creatNew1("".getClass()); boolean cNew = creatNew2("".getClass()); int dNew = creatNew2("".getClass()); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); }
creatNew和creatNew1比较
相同点:两个方法的返回值类型与传入参数类型已知
不同点:参数类型不同,一个是具体类型,一个是Class类- creatNew1和creatNew2比较
相同点:方法参数类型一致都是Class类型
不同点:creatNew2返回值类型与参数类型可以不一样 - creatNew2和creatNew3比较
这两个方法是等价的
- 单独的T代表一个类型而Class< T >和Class< ? >代表这个类型所对应的Class类
- Class< T >在实例化的时候,T要替换成具体类
- Class< ? >它是个通配泛型,?可以代表任何类型
PS:T是代表任意一种类型,这是泛型里的问题,是一种形式,表示你用的是泛型编程,不受类型的约束
文章来源: 泛型