From cc1592f8e3f419b86442d11adb1791ca63525550 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 8 Jan 2021 16:27:20 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0=20generic=20me?= =?UTF-8?q?thod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reflection/ReflectionObjectTest.java | 17 +++++++++++++++++ .../dmitriymx/reflection/SomeGenericObject.java | 13 +++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/test/java/ru/dmitriymx/reflection/SomeGenericObject.java diff --git a/src/test/java/ru/dmitriymx/reflection/ReflectionObjectTest.java b/src/test/java/ru/dmitriymx/reflection/ReflectionObjectTest.java index b396217..4fe0b25 100644 --- a/src/test/java/ru/dmitriymx/reflection/ReflectionObjectTest.java +++ b/src/test/java/ru/dmitriymx/reflection/ReflectionObjectTest.java @@ -139,6 +139,23 @@ public class ReflectionObjectTest { assertNotNull(refMethod); } + @Test + public void method_generic() { + SomeGenericObject someGenericObject = new SomeGenericObject<>(); + String key = "KEY!"; + int value = 3306; + + ReflectionObject refObj = new ReflectionObject(someGenericObject); + + ReflectionMethod refMethod = refObj.method("genericMethod", Object.class, Object.class); + assertNotNull(refMethod); + + refMethod.invoke(key, value); + assertFalse(someGenericObject.map.isEmpty()); + assertTrue(someGenericObject.map.containsKey(key)); + assertEquals(value, (int) someGenericObject.map.get(key)); + } + @Test(expected = ReflectionException.class) public void method_notExists() { ReflectionObject refObj = new ReflectionObject(new SomeObject()); diff --git a/src/test/java/ru/dmitriymx/reflection/SomeGenericObject.java b/src/test/java/ru/dmitriymx/reflection/SomeGenericObject.java new file mode 100644 index 0000000..4cdae3d --- /dev/null +++ b/src/test/java/ru/dmitriymx/reflection/SomeGenericObject.java @@ -0,0 +1,13 @@ +package ru.dmitriymx.reflection; + +import java.util.HashMap; +import java.util.Map; + +public class SomeGenericObject { + + public Map map = new HashMap<>(); + + public void genericMethod(K key, V value) { + map.put(key, value); + } +} From 8e97d33be4ca50d047dc54e0a1b440be2268c179 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 8 Jan 2021 16:39:33 +0300 Subject: [PATCH 2/2] =?UTF-8?q?fix=20=D0=BF=D0=BE=D0=BB=D0=B5=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reflection/ReflectionObject.java | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/dmitriymx/reflection/ReflectionObject.java b/src/main/java/ru/dmitriymx/reflection/ReflectionObject.java index 51d01a1..e41b4db 100644 --- a/src/main/java/ru/dmitriymx/reflection/ReflectionObject.java +++ b/src/main/java/ru/dmitriymx/reflection/ReflectionObject.java @@ -84,15 +84,39 @@ public class ReflectionObject { } } + public List methodsAllList() { + final Class clazz = object.getClass(); + + Method[] declaredMethods = clazz.getMethods(); + if (declaredMethods.length > 0) { + List result = new ArrayList<>(declaredMethods.length); + + for (Method method : declaredMethods) { + result.add(new ReflectionMethod(object, method)); + } + + return result; + } else { + return Collections.emptyList(); + } + } + @SuppressWarnings("unchecked") public ReflectionMethod method(String methodName, Class... parameterTypes) { final Class clazz = object.getClass(); + Method method; try { - return new ReflectionMethod(object, clazz.getDeclaredMethod(methodName, parameterTypes)); + method = clazz.getDeclaredMethod(methodName, parameterTypes); } catch (NoSuchMethodException e) { - throw new ReflectionException(e); + try { + method = clazz.getMethod(methodName, parameterTypes); + } catch (NoSuchMethodException e1) { + throw new ReflectionException(e1); + } } + + return new ReflectionMethod(object, method); } @Override