Skip to content

Instantly share code, notes, and snippets.

@Atsumi3
Last active January 22, 2016 09:06
Show Gist options
  • Save Atsumi3/66faf2d6b8a58ee378cd to your computer and use it in GitHub Desktop.
Save Atsumi3/66faf2d6b8a58ee378cd to your computer and use it in GitHub Desktop.
Java Generics & Reflection Memo
import java.lang.reflect.InvocationTargetException;
/**
* Created on 2016/01/22.
*/
public class Example {
public static void main(String[] args){
BaseClass baseClass = new BaseClass();
ExtendClass extendClass = new ExtendClass();
try {
//public void test1(Integer val)
BaseClass.class.getMethod("test1", new Class[]{Integer.class}).invoke(baseClass, 1);
//public Class test2(Class clazz)
BaseClass.class.getMethod("test2", new Class[]{Class.class}).invoke(baseClass, Class.class);
//public <T> void test3(T clazz)
BaseClass.class.getMethod("test3", new Class[]{Object.class}).invoke(baseClass, Object.class);
//public <T extends BaseClass> void test4(T clazz)
BaseClass.class.getMethod("test4", new Class[]{BaseClass.class}).invoke(baseClass, baseClass);
BaseClass.class.getMethod("test4", new Class[]{BaseClass.class}).invoke(baseClass, extendClass);
//public void test5(Integer val, Integer val2)
BaseClass.class.getMethod("test5", new Class[]{Integer.class, Integer.class}).invoke(baseClass, 1, 2);
//public Class test6(Class clazz, Integer val)
BaseClass.class.getMethod("test6", new Class[]{Class.class, Integer.class}).invoke(baseClass, Class.class, 2);
//public <T> void test7(T clazz, Integer val)
BaseClass.class.getMethod("test7", new Class[]{Object.class, Integer.class}).invoke(baseClass, Object.class, 2);
//public <T extends BaseClass> void test8(T clazz, Integer val)
BaseClass.class.getMethod("test8", new Class[]{BaseClass.class, Integer.class}).invoke(baseClass, baseClass, 2);
BaseClass.class.getMethod("test8", new Class[]{BaseClass.class, Integer.class}).invoke(baseClass, extendClass, 2);
//public <T extends ExtendClass> void test9(T valueType)
// -> public void subTest1(Integer val)
BaseClass.class.getMethod("test9", new Class[]{ExtendClass.class}).invoke(baseClass, extendClass);
//public <T extends ExtendClass> void test10(Class<T> valueType)
// -> public void subTest1(Integer val)
BaseClass.class.getMethod("test10", new Class[]{Class.class}).invoke(baseClass, extendClass.getClass());
//public <T extends BaseClass> void test11(Class<T> clazz)
BaseClass.class.getMethod("test11", new Class[]{Class.class}).invoke(baseClass, baseClass.getClass());
//
//valueType.getMethod("mapping2", new Class[]{String.class, JsonEntity.class});
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
static class BaseClass {
public void test1(Integer val){
System.out.println("iketa");
}
public void test2(Class clazz){
System.out.println("iketa2");
}
public <T> void test3(T clazz){
System.out.println("iketa3");
}
public <T extends BaseClass> void test4(T clazz){
System.out.println("iketa4");
}
public void test5(Integer val, Integer val2){
System.out.println("iketa5");
}
public void test6(Class clazz, Integer val){
System.out.println("iketa6");
}
public <T> void test7(T clazz, Integer val){
System.out.println("iketa7");
}
public <T extends BaseClass> void test8(T clazz, Integer val){
System.out.println("iketa8");
}
public <T extends ExtendClass> void test9(T valueType) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
valueType.getClass().getMethod("subTest1", new Class[]{Integer.class}).invoke(valueType, 3);
}
public <T extends ExtendClass> void test10(Class<T> valueType) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {
valueType.getMethod("subTest1", new Class[]{Integer.class}).invoke(valueType.getConstructor().newInstance(), 3);
}
public <T extends BaseClass> void test11(Class<T> clazz){
System.out.println("iketa11");
}
}
static class ExtendClass extends BaseClass {
public ExtendClass(){
}
public void subTest1(Integer val){
System.out.println("iketa9");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment