java 泛型 反射
2017-04-27 本文已影响78人
proud2008
通过类上指定的泛型
public class TestCall1<T, R> {
public T c(R t) {
return null;
}
}
public class TestCall2<T,R> extends TestCall1<T,R> {
}
测试类
@Test
public void test3() {
TestCall1 testCall1 = new TestCall1<Integer, String>() {
};
TestCall1 testCall2 = new TestCall1<Integer, String>();
Type type1 = testCall1.getClass().getGenericSuperclass();
System.out.println(type1);
Type type2 = testCall2.getClass().getGenericSuperclass();
System.out.println(type2);
if (type1 instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type1;
System.out.println(parameterizedType.getActualTypeArguments()[0]);
System.out.println(parameterizedType.getActualTypeArguments()[1]);
}
}
com.hj.tl.driver.TestCall1<java.lang.Integer, java.lang.String>
class java.lang.Object
class java.lang.Integer
class java.lang.String
@Test
public void test3() {
TestCall1 testCall1 = new TestCall2<Integer, String>() {
};
TestCall1 testCall2 = new TestCall2<Integer, String>();
Type type1 = testCall1.getClass().getGenericSuperclass();
System.out.println(type1);
Type type2 = testCall2.getClass().getGenericSuperclass();
System.out.println(type2);
if (type1 instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type1;
System.out.println(parameterizedType.getActualTypeArguments()[0]);
System.out.println(parameterizedType.getActualTypeArguments()[1]);
}
}
com.hj.tl.driver.TestCall2<java.lang.Integer, java.lang.String>
com.hj.tl.driver.TestCall1<T, R>
class java.lang.Integer
class java.lang.String
说明
1、new TestCall2<Integer, String>() { }
是新建了个子类 其类型class com.hj.tl.driver.ExampleUnitTest$2
2、getClass().getGenericSuperclass()
是获得父类的类型 注返回的有个java.lang.Object
通过method的方式获取不到
@Test
public void test4() {
TestCall1 call1 = new TestCall1<Integer, String>() {
@Override
public Integer c(String t) {
return super.c(t);
}
@Override
public Integer mm() {
return super.mm();
}
};
TestCall1 call2 = new TestCall1<Integer, String>();
try {
Method[] method1 = call1.getClass().getMethods();
System.out.println(Arrays.toString(method1));
Method[] method2 = call2.getClass().getMethods();
System.out.println(Arrays.toString(method2));
} catch (Exception e) {
e.printStackTrace();
}
}
Paste_Image.png
发现只有重写了方法 才能获取到