Last active
January 22, 2016 09:06
-
-
Save Atsumi3/66faf2d6b8a58ee378cd to your computer and use it in GitHub Desktop.
Java Generics & Reflection Memo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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