From 566d7957592c40fcb28bd98484e6c8eec759382c Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Fri, 5 Jun 2020 23:56:54 +0530 Subject: [PATCH 01/18] Added code to access private properties of a class --- .../AccessPrivateProperties.java | 27 ++++++++++++ .../access/privatefields/Person.java | 18 ++++++++ .../AccessPrivateFieldsUnitTest.java | 36 ++++++++++++++++ .../AccessPrivateMethodsUnitTest.java | 43 +++++++++++++++++++ 4 files changed, 124 insertions(+) create mode 100755 core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/AccessPrivateProperties.java create mode 100755 core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java create mode 100644 core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java create mode 100644 core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java diff --git a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/AccessPrivateProperties.java b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/AccessPrivateProperties.java new file mode 100755 index 0000000000..938f5fd4a2 --- /dev/null +++ b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/AccessPrivateProperties.java @@ -0,0 +1,27 @@ +package com.baeldung.reflection.access.privatefields; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class AccessPrivateProperties { + + public void accessPrivateFields(String declaredField, Object declaredFieldValue, boolean accessible) throws NoSuchFieldException, NullPointerException, IllegalArgumentException, IllegalAccessException { + Person person = new Person(); + Field field = person.getClass() + .getDeclaredField(declaredField); + field.setAccessible(accessible); + field.set(person, declaredFieldValue); + System.out.println(person.getName()); + } + + public void accessPrivateMethods(String declaredMethod, Class parameterType, Object name, boolean accessible) throws NoSuchMethodException, IllegalAccessException, NullPointerException, IllegalArgumentException, InvocationTargetException { + Person person = new Person(); + Method method = person.getClass() + .getDeclaredMethod(declaredMethod, parameterType); + method.setAccessible(accessible); + String greetMessage = (String) method.invoke(person, name); + System.out.println(greetMessage); + } + +} diff --git a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java new file mode 100755 index 0000000000..e59ff3bea8 --- /dev/null +++ b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java @@ -0,0 +1,18 @@ +package com.baeldung.reflection.access.privatefields; + +public class Person { + + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + private String greet(String number) { + return "Hi " + Integer.parseInt(number); + } +} diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java new file mode 100644 index 0000000000..8faea06f78 --- /dev/null +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.reflection.access.privatefields; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +public class AccessPrivateFieldsUnitTest { + + private static AccessPrivateProperties accessPrivateProperties; + + @BeforeAll + public static void beforeAll() { + accessPrivateProperties = new AccessPrivateProperties(); + } + + @Test + public void testForNoSuchFieldException() { + Assertions.assertThrows(NoSuchFieldException.class, () -> accessPrivateProperties.accessPrivateFields("firstName", "John", true)); + } + + @Test + public void testForIllegalAccessException() { + Assertions.assertThrows(IllegalAccessException.class, () -> accessPrivateProperties.accessPrivateFields("name", "John", false)); + } + + @Test + public void testForIllegalArgumentException() { + Assertions.assertThrows(IllegalArgumentException.class, () -> accessPrivateProperties.accessPrivateFields("name", 25, true)); + } + + @Test + public void testForNullPointerException() { + Assertions.assertThrows(NullPointerException.class, () -> accessPrivateProperties.accessPrivateFields(null, "John", true)); + } + +} diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java new file mode 100644 index 0000000000..a2e0f3fe28 --- /dev/null +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java @@ -0,0 +1,43 @@ +package com.baeldung.reflection.access.privatefields; + +import java.lang.reflect.InvocationTargetException; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +public class AccessPrivateMethodsUnitTest { + + private static AccessPrivateProperties accessPrivateProperties; + + @BeforeAll + public static void beforeAll() { + accessPrivateProperties = new AccessPrivateProperties(); + } + + @Test + public void testForNoSuchMethodException() { + Assertions.assertThrows(NoSuchMethodException.class, () -> accessPrivateProperties.accessPrivateMethods("greeting", String.class, "5", true)); + } + + @Test + public void testForIllegalAccessException() { + Assertions.assertThrows(IllegalAccessException.class, () -> accessPrivateProperties.accessPrivateMethods("greet", String.class, "5", false)); + } + + @Test + public void testForIllegalArgumentException() { + Assertions.assertThrows(IllegalArgumentException.class, () -> accessPrivateProperties.accessPrivateMethods("greet", String.class, 5, true)); + } + + @Test + public void testForNullPointerException() { + Assertions.assertThrows(NullPointerException.class, () -> accessPrivateProperties.accessPrivateMethods(null, String.class, "5", true)); + } + + @Test + public void testForInvocationTargetException() { + Assertions.assertThrows(InvocationTargetException.class, () -> accessPrivateProperties.accessPrivateMethods("greet", String.class, "John", true)); + } + +} From ba3bd78a108fae20e98049aa2a015a95c26119ce Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Wed, 10 Jun 2020 23:23:29 +0530 Subject: [PATCH 02/18] Removed abstractions to increase simplicity. --- .../AccessPrivateProperties.java | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100755 core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/AccessPrivateProperties.java diff --git a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/AccessPrivateProperties.java b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/AccessPrivateProperties.java deleted file mode 100755 index 938f5fd4a2..0000000000 --- a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/AccessPrivateProperties.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.reflection.access.privatefields; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -public class AccessPrivateProperties { - - public void accessPrivateFields(String declaredField, Object declaredFieldValue, boolean accessible) throws NoSuchFieldException, NullPointerException, IllegalArgumentException, IllegalAccessException { - Person person = new Person(); - Field field = person.getClass() - .getDeclaredField(declaredField); - field.setAccessible(accessible); - field.set(person, declaredFieldValue); - System.out.println(person.getName()); - } - - public void accessPrivateMethods(String declaredMethod, Class parameterType, Object name, boolean accessible) throws NoSuchMethodException, IllegalAccessException, NullPointerException, IllegalArgumentException, InvocationTargetException { - Person person = new Person(); - Method method = person.getClass() - .getDeclaredMethod(declaredMethod, parameterType); - method.setAccessible(accessible); - String greetMessage = (String) method.invoke(person, name); - System.out.println(greetMessage); - } - -} From 8e2725a64e604c7add45ca58203626a7238f9618 Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Wed, 10 Jun 2020 23:27:42 +0530 Subject: [PATCH 03/18] Added unit test cases in givenX_whenY_thenZ format. --- .../access/privatefields/Person.java | 11 ++-- .../AccessPrivateFieldsUnitTest.java | 43 +++++++++------- .../AccessPrivateMethodsUnitTest.java | 51 ++++++++++++------- 3 files changed, 65 insertions(+), 40 deletions(-) diff --git a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java index e59ff3bea8..199d2429a7 100755 --- a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java +++ b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java @@ -1,7 +1,7 @@ package com.baeldung.reflection.access.privatefields; public class Person { - + private String name; public String getName() { @@ -12,7 +12,12 @@ public class Person { this.name = name; } - private String greet(String number) { - return "Hi " + Integer.parseInt(number); + private String greet(String name) { + return "Hello " + name; } + + private int divideByZeroExample() { + return 1 / 0; + } + } diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java index 8faea06f78..200ccea9e3 100644 --- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java @@ -1,36 +1,43 @@ package com.baeldung.reflection.access.privatefields; +import java.lang.reflect.Field; + import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; public class AccessPrivateFieldsUnitTest { - private static AccessPrivateProperties accessPrivateProperties; + @Test + public void whenGetField_thenSuccess() throws NoSuchFieldException, NullPointerException, IllegalArgumentException, IllegalAccessException { + Person person = new Person(); + person.setName("John"); - @BeforeAll - public static void beforeAll() { - accessPrivateProperties = new AccessPrivateProperties(); + Field field = person.getClass() + .getDeclaredField("name"); + field.setAccessible(true); + + String name = (String) field.get(person); + + Assertions.assertEquals("John", name); } @Test - public void testForNoSuchFieldException() { - Assertions.assertThrows(NoSuchFieldException.class, () -> accessPrivateProperties.accessPrivateFields("firstName", "John", true)); + public void givenInt_whenSetStringField_thenIllegalArgumentException() throws NoSuchFieldException, NullPointerException, IllegalArgumentException, IllegalAccessException { + Person person = new Person(); + Field field = person.getClass() + .getDeclaredField("name"); + field.setAccessible(true); + + Assertions.assertThrows(IllegalArgumentException.class, () -> field.setInt(person, 25)); } @Test - public void testForIllegalAccessException() { - Assertions.assertThrows(IllegalAccessException.class, () -> accessPrivateProperties.accessPrivateFields("name", "John", false)); - } + public void whenFieldNotSetAccessible_thenIllegalAccessException() throws NoSuchFieldException, NullPointerException, IllegalArgumentException, IllegalAccessException { + Person person = new Person(); + Field field = person.getClass() + .getDeclaredField("name"); - @Test - public void testForIllegalArgumentException() { - Assertions.assertThrows(IllegalArgumentException.class, () -> accessPrivateProperties.accessPrivateFields("name", 25, true)); - } - - @Test - public void testForNullPointerException() { - Assertions.assertThrows(NullPointerException.class, () -> accessPrivateProperties.accessPrivateFields(null, "John", true)); + Assertions.assertThrows(IllegalAccessException.class, () -> field.set(person, "John")); } } diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java index a2e0f3fe28..b44731c7ef 100644 --- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java @@ -1,43 +1,56 @@ package com.baeldung.reflection.access.privatefields; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; public class AccessPrivateMethodsUnitTest { - private static AccessPrivateProperties accessPrivateProperties; + @Test + public void whenGetMethod_thenSuccess() throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + Person person = new Person(); - @BeforeAll - public static void beforeAll() { - accessPrivateProperties = new AccessPrivateProperties(); + Method method = person.getClass() + .getDeclaredMethod("greet", String.class); + method.setAccessible(true); + + String greetMessage = (String) method.invoke(person, "John"); + + Assertions.assertEquals("Hello John", greetMessage); } @Test - public void testForNoSuchMethodException() { - Assertions.assertThrows(NoSuchMethodException.class, () -> accessPrivateProperties.accessPrivateMethods("greeting", String.class, "5", true)); + public void givenInt_whenInvokeMethod_thenIllegalArgumentException() throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + Person person = new Person(); + + Method method = person.getClass() + .getDeclaredMethod("greet", String.class); + method.setAccessible(true); + + Assertions.assertThrows(IllegalArgumentException.class, () -> method.invoke(person, 25)); } @Test - public void testForIllegalAccessException() { - Assertions.assertThrows(IllegalAccessException.class, () -> accessPrivateProperties.accessPrivateMethods("greet", String.class, "5", false)); + public void whenMethodNotSetAccessible_thenIllegalAccessException() throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + Person person = new Person(); + + Method method = person.getClass() + .getDeclaredMethod("greet", String.class); + + Assertions.assertThrows(IllegalAccessException.class, () -> method.invoke(person, "John")); } @Test - public void testForIllegalArgumentException() { - Assertions.assertThrows(IllegalArgumentException.class, () -> accessPrivateProperties.accessPrivateMethods("greet", String.class, 5, true)); - } + public void whenCallingMethodThrowsException_thenInvocationTargetException() throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + Person person = new Person(); - @Test - public void testForNullPointerException() { - Assertions.assertThrows(NullPointerException.class, () -> accessPrivateProperties.accessPrivateMethods(null, String.class, "5", true)); - } + Method method = person.getClass() + .getDeclaredMethod("divideByZeroExample"); + method.setAccessible(true); - @Test - public void testForInvocationTargetException() { - Assertions.assertThrows(InvocationTargetException.class, () -> accessPrivateProperties.accessPrivateMethods("greet", String.class, "John", true)); + Assertions.assertThrows(InvocationTargetException.class, () -> method.invoke(person)); } } From f72691730627f9b54bf3ef38a516bff5643a250b Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Mon, 15 Jun 2020 23:32:09 +0530 Subject: [PATCH 04/18] Included test cases for NoSuchFieldException, NoSuchMethodException and NullPointerException. --- .../access/privatefields/Person.java | 12 ++++- .../AccessPrivateFieldsUnitTest.java | 46 ++++++++++++++----- .../AccessPrivateMethodsUnitTest.java | 32 +++++++++---- 3 files changed, 68 insertions(+), 22 deletions(-) diff --git a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java index 199d2429a7..2ec263f6ae 100755 --- a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java +++ b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java @@ -2,7 +2,9 @@ package com.baeldung.reflection.access.privatefields; public class Person { - private String name; + private String name = "John"; + + private int age = 30; public String getName() { return name; @@ -12,6 +14,14 @@ public class Person { this.name = name; } + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + private String greet(String name) { return "Hello " + name; } diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java index 200ccea9e3..b885e3b669 100644 --- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java @@ -8,36 +8,58 @@ import org.junit.jupiter.api.Test; public class AccessPrivateFieldsUnitTest { @Test - public void whenGetField_thenSuccess() throws NoSuchFieldException, NullPointerException, IllegalArgumentException, IllegalAccessException { + public void whenGetFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { Person person = new Person(); - person.setName("John"); - Field field = person.getClass() + Field fieldName = person.getClass() .getDeclaredField("name"); - field.setAccessible(true); + fieldName.setAccessible(true); - String name = (String) field.get(person); + String name = (String) fieldName.get(person); + + Field fieldAge = person.getClass() + .getDeclaredField("age"); + fieldAge.setAccessible(true); + + int age = fieldAge.getInt(person); Assertions.assertEquals("John", name); + Assertions.assertEquals(30, age); } @Test - public void givenInt_whenSetStringField_thenIllegalArgumentException() throws NoSuchFieldException, NullPointerException, IllegalArgumentException, IllegalAccessException { + public void givenInt_whenSetStringField_thenIllegalArgumentException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { Person person = new Person(); - Field field = person.getClass() + Field fieldName = person.getClass() .getDeclaredField("name"); - field.setAccessible(true); + fieldName.setAccessible(true); - Assertions.assertThrows(IllegalArgumentException.class, () -> field.setInt(person, 25)); + Assertions.assertThrows(IllegalArgumentException.class, () -> fieldName.setInt(person, 25)); } @Test - public void whenFieldNotSetAccessible_thenIllegalAccessException() throws NoSuchFieldException, NullPointerException, IllegalArgumentException, IllegalAccessException { + public void whenFieldNotSetAccessible_thenIllegalAccessException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { Person person = new Person(); - Field field = person.getClass() + Field fieldName = person.getClass() .getDeclaredField("name"); - Assertions.assertThrows(IllegalAccessException.class, () -> field.set(person, "John")); + Assertions.assertThrows(IllegalAccessException.class, () -> fieldName.get(person)); + } + + @Test + public void whenAccessingWrongProperty_thenNoSuchFieldException() throws NoSuchFieldException, NullPointerException { + Person person = new Person(); + + Assertions.assertThrows(NoSuchFieldException.class, () -> person.getClass() + .getDeclaredField("genders")); + } + + @Test + public void whenAccessingNullProperty_thenNullPointerException() throws NoSuchFieldException, NullPointerException { + Person person = new Person(); + + Assertions.assertThrows(NullPointerException.class, () -> person.getClass() + .getDeclaredField(null)); } } diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java index b44731c7ef..10c953f4af 100644 --- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java @@ -9,20 +9,20 @@ import org.junit.jupiter.api.Test; public class AccessPrivateMethodsUnitTest { @Test - public void whenGetMethod_thenSuccess() throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + public void whenGetMethod_thenSuccess() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, NullPointerException { Person person = new Person(); Method method = person.getClass() .getDeclaredMethod("greet", String.class); method.setAccessible(true); - String greetMessage = (String) method.invoke(person, "John"); + String greetMessage = (String) method.invoke(person, "Jane"); - Assertions.assertEquals("Hello John", greetMessage); + Assertions.assertEquals("Hello Jane", greetMessage); } @Test - public void givenInt_whenInvokeMethod_thenIllegalArgumentException() throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + public void givenInt_whenInvokeMethod_thenIllegalArgumentException() throws IllegalArgumentException, IllegalAccessException, NoSuchMethodException, NullPointerException { Person person = new Person(); Method method = person.getClass() @@ -33,24 +33,38 @@ public class AccessPrivateMethodsUnitTest { } @Test - public void whenMethodNotSetAccessible_thenIllegalAccessException() throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + public void whenMethodNotSetAccessible_thenIllegalAccessException() throws IllegalArgumentException, IllegalAccessException, NoSuchMethodException, NullPointerException { Person person = new Person(); Method method = person.getClass() .getDeclaredMethod("greet", String.class); - Assertions.assertThrows(IllegalAccessException.class, () -> method.invoke(person, "John")); + Assertions.assertThrows(IllegalAccessException.class, () -> method.invoke(person, "Jane")); } @Test - public void whenCallingMethodThrowsException_thenInvocationTargetException() throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + public void whenCallingMethodThrowsException_thenInvocationTargetException() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, NullPointerException { Person person = new Person(); - Method method = person.getClass() .getDeclaredMethod("divideByZeroExample"); method.setAccessible(true); - Assertions.assertThrows(InvocationTargetException.class, () -> method.invoke(person)); } + @Test + public void whenAccessingWrongProperty_thenNoSuchMethodException() throws NoSuchMethodException, NullPointerException { + Person person = new Person(); + + Assertions.assertThrows(NoSuchMethodException.class, () -> person.getClass() + .getDeclaredMethod("greeting", String.class)); + } + + @Test + public void whenAccessingNullMethod_thenNullPointerException() throws NoSuchMethodException, NullPointerException { + Person person = new Person(); + + Assertions.assertThrows(NullPointerException.class, () -> person.getClass() + .getDeclaredMethod(null, String.class)); + } + } From efa72998e56e9bcbae6ab9b442dfa9cc463c58b0 Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Fri, 19 Jun 2020 22:20:57 +0530 Subject: [PATCH 05/18] Added new test case for IllegalArgumentException --- .../privatefields/AccessPrivateFieldsUnitTest.java | 4 ++-- .../privatefields/AccessPrivateMethodsUnitTest.java | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java index b885e3b669..c74af1fe90 100644 --- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java @@ -28,13 +28,13 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void givenInt_whenSetStringField_thenIllegalArgumentException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void givenInt_whenGetStringField_thenIllegalArgumentException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { Person person = new Person(); Field fieldName = person.getClass() .getDeclaredField("name"); fieldName.setAccessible(true); - Assertions.assertThrows(IllegalArgumentException.class, () -> fieldName.setInt(person, 25)); + Assertions.assertThrows(IllegalArgumentException.class, () -> fieldName.getInt(person)); } @Test diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java index 10c953f4af..df745897d2 100644 --- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java @@ -31,6 +31,17 @@ public class AccessPrivateMethodsUnitTest { Assertions.assertThrows(IllegalArgumentException.class, () -> method.invoke(person, 25)); } + + @Test + public void givenMultipleParameters_whenInvokeMethod_thenIllegalArgumentException() throws IllegalArgumentException, IllegalAccessException, NoSuchMethodException, NullPointerException { + Person person = new Person(); + + Method method = person.getClass() + .getDeclaredMethod("greet", String.class); + method.setAccessible(true); + + Assertions.assertThrows(IllegalArgumentException.class, () -> method.invoke(person, "John", "Jane")); + } @Test public void whenMethodNotSetAccessible_thenIllegalAccessException() throws IllegalArgumentException, IllegalAccessException, NoSuchMethodException, NullPointerException { From a951d80b419ef562f688a1afaae492098eb3e66e Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Tue, 23 Jun 2020 21:48:01 +0530 Subject: [PATCH 06/18] Removed test cases for getting private methods --- .../AccessPrivateMethodsUnitTest.java | 81 ------------------- 1 file changed, 81 deletions(-) delete mode 100644 core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java deleted file mode 100644 index df745897d2..0000000000 --- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateMethodsUnitTest.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.baeldung.reflection.access.privatefields; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public class AccessPrivateMethodsUnitTest { - - @Test - public void whenGetMethod_thenSuccess() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, NullPointerException { - Person person = new Person(); - - Method method = person.getClass() - .getDeclaredMethod("greet", String.class); - method.setAccessible(true); - - String greetMessage = (String) method.invoke(person, "Jane"); - - Assertions.assertEquals("Hello Jane", greetMessage); - } - - @Test - public void givenInt_whenInvokeMethod_thenIllegalArgumentException() throws IllegalArgumentException, IllegalAccessException, NoSuchMethodException, NullPointerException { - Person person = new Person(); - - Method method = person.getClass() - .getDeclaredMethod("greet", String.class); - method.setAccessible(true); - - Assertions.assertThrows(IllegalArgumentException.class, () -> method.invoke(person, 25)); - } - - @Test - public void givenMultipleParameters_whenInvokeMethod_thenIllegalArgumentException() throws IllegalArgumentException, IllegalAccessException, NoSuchMethodException, NullPointerException { - Person person = new Person(); - - Method method = person.getClass() - .getDeclaredMethod("greet", String.class); - method.setAccessible(true); - - Assertions.assertThrows(IllegalArgumentException.class, () -> method.invoke(person, "John", "Jane")); - } - - @Test - public void whenMethodNotSetAccessible_thenIllegalAccessException() throws IllegalArgumentException, IllegalAccessException, NoSuchMethodException, NullPointerException { - Person person = new Person(); - - Method method = person.getClass() - .getDeclaredMethod("greet", String.class); - - Assertions.assertThrows(IllegalAccessException.class, () -> method.invoke(person, "Jane")); - } - - @Test - public void whenCallingMethodThrowsException_thenInvocationTargetException() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, NullPointerException { - Person person = new Person(); - Method method = person.getClass() - .getDeclaredMethod("divideByZeroExample"); - method.setAccessible(true); - Assertions.assertThrows(InvocationTargetException.class, () -> method.invoke(person)); - } - - @Test - public void whenAccessingWrongProperty_thenNoSuchMethodException() throws NoSuchMethodException, NullPointerException { - Person person = new Person(); - - Assertions.assertThrows(NoSuchMethodException.class, () -> person.getClass() - .getDeclaredMethod("greeting", String.class)); - } - - @Test - public void whenAccessingNullMethod_thenNullPointerException() throws NoSuchMethodException, NullPointerException { - Person person = new Person(); - - Assertions.assertThrows(NullPointerException.class, () -> person.getClass() - .getDeclaredMethod(null, String.class)); - } - -} From 885278e502f896f232b712038613bb7c8b01ec62 Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Tue, 23 Jun 2020 21:49:35 +0530 Subject: [PATCH 07/18] Added test cases for accessing all data types. --- .../access/privatefields/Person.java | 76 +++++++++++++-- .../AccessPrivateFieldsUnitTest.java | 95 ++++++++++++++++--- 2 files changed, 153 insertions(+), 18 deletions(-) diff --git a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java index 2ec263f6ae..433dc7636d 100755 --- a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java +++ b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java @@ -4,7 +4,21 @@ public class Person { private String name = "John"; - private int age = 30; + private byte age = 30; + + private short uidNumber = 5555; + + private int pinCode = 452002; + + private long contactNumber = 123456789L; + + private float height = 6.1242f; + + private double weight = 75.2564; + + private char gender = 'M'; + + private boolean active = true; public String getName() { return name; @@ -14,20 +28,68 @@ public class Person { this.name = name; } - public int getAge() { + public byte getAge() { return age; } - public void setAge(int age) { + public void setAge(byte age) { this.age = age; } - private String greet(String name) { - return "Hello " + name; + public short getUidNumber() { + return uidNumber; } - private int divideByZeroExample() { - return 1 / 0; + public void setUidNumber(short uidNumber) { + this.uidNumber = uidNumber; + } + + public int getPinCode() { + return pinCode; + } + + public void setPinCode(int pinCode) { + this.pinCode = pinCode; + } + + public long getContactNumber() { + return contactNumber; + } + + public void setContactNumber(long contactNumber) { + this.contactNumber = contactNumber; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + + public double getWeight() { + return weight; + } + + public void setWeight(double weight) { + this.weight = weight; + } + + public char getGender() { + return gender; + } + + public void setGender(char gender) { + this.gender = gender; + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; } } diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java index c74af1fe90..69f3eebe71 100644 --- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java @@ -11,39 +11,112 @@ public class AccessPrivateFieldsUnitTest { public void whenGetFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { Person person = new Person(); - Field fieldName = person.getClass() + Field nameField = person.getClass() .getDeclaredField("name"); - fieldName.setAccessible(true); + nameField.setAccessible(true); - String name = (String) fieldName.get(person); + String name = (String) nameField.get(person); - Field fieldAge = person.getClass() + Field ageField = person.getClass() .getDeclaredField("age"); - fieldAge.setAccessible(true); + ageField.setAccessible(true); - int age = fieldAge.getInt(person); + byte age = ageField.getByte(person); Assertions.assertEquals("John", name); Assertions.assertEquals(30, age); } + @Test + public void whenGetIntegerFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + Person person = new Person(); + + Field uidNumberField = person.getClass() + .getDeclaredField("uidNumber"); + uidNumberField.setAccessible(true); + + short uidNumber = uidNumberField.getShort(person); + + Field pinCodeField = person.getClass() + .getDeclaredField("pinCode"); + pinCodeField.setAccessible(true); + + int pinCode = pinCodeField.getInt(person); + + Field contactNumberField = person.getClass() + .getDeclaredField("contactNumber"); + contactNumberField.setAccessible(true); + + long contactNumber = contactNumberField.getLong(person); + + Assertions.assertEquals(5555, uidNumber); + Assertions.assertEquals(452002, pinCode); + Assertions.assertEquals(123456789L, contactNumber); + } + + @Test + public void whenGetFloatingTypeFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + Person person = new Person(); + + Field heightField = person.getClass() + .getDeclaredField("height"); + heightField.setAccessible(true); + + float height = heightField.getFloat(person); + + Field weightField = person.getClass() + .getDeclaredField("weight"); + weightField.setAccessible(true); + + double weight = weightField.getDouble(person); + + Assertions.assertEquals(6.1242f, height); + Assertions.assertEquals(75.2564, weight); + } + + @Test + public void whenGetCharacterFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + Person person = new Person(); + + Field genderField = person.getClass() + .getDeclaredField("gender"); + genderField.setAccessible(true); + + char gender = genderField.getChar(person); + + Assertions.assertEquals('M', gender); + } + + @Test + public void whenGetBooleanFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + Person person = new Person(); + + Field activeField = person.getClass() + .getDeclaredField("active"); + activeField.setAccessible(true); + + boolean active = activeField.getBoolean(person); + + Assertions.assertTrue(active); + } + @Test public void givenInt_whenGetStringField_thenIllegalArgumentException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { Person person = new Person(); - Field fieldName = person.getClass() + Field nameField = person.getClass() .getDeclaredField("name"); - fieldName.setAccessible(true); + nameField.setAccessible(true); - Assertions.assertThrows(IllegalArgumentException.class, () -> fieldName.getInt(person)); + Assertions.assertThrows(IllegalArgumentException.class, () -> nameField.getInt(person)); } @Test public void whenFieldNotSetAccessible_thenIllegalAccessException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { Person person = new Person(); - Field fieldName = person.getClass() + Field nameField = person.getClass() .getDeclaredField("name"); - Assertions.assertThrows(IllegalAccessException.class, () -> fieldName.get(person)); + Assertions.assertThrows(IllegalAccessException.class, () -> nameField.get(person)); } @Test From 0e528b11d2fd5d832b2d040bdf5c65214c60bdaf Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Sat, 27 Jun 2020 16:33:20 +0530 Subject: [PATCH 08/18] Segregated test cases for primitive and object types. Added test case for Autoboxing. --- .../AccessPrivateFieldsUnitTest.java | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java index 69f3eebe71..bf9e4ea591 100644 --- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java @@ -8,50 +8,49 @@ import org.junit.jupiter.api.Test; public class AccessPrivateFieldsUnitTest { @Test - public void whenGetFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void whenGetIntegerFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { Person person = new Person(); - Field nameField = person.getClass() - .getDeclaredField("name"); - nameField.setAccessible(true); - - String name = (String) nameField.get(person); - Field ageField = person.getClass() .getDeclaredField("age"); ageField.setAccessible(true); byte age = ageField.getByte(person); - - Assertions.assertEquals("John", name); Assertions.assertEquals(30, age); - } - - @Test - public void whenGetIntegerFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { - Person person = new Person(); Field uidNumberField = person.getClass() .getDeclaredField("uidNumber"); uidNumberField.setAccessible(true); short uidNumber = uidNumberField.getShort(person); + Assertions.assertEquals(5555, uidNumber); Field pinCodeField = person.getClass() .getDeclaredField("pinCode"); pinCodeField.setAccessible(true); int pinCode = pinCodeField.getInt(person); + Assertions.assertEquals(452002, pinCode); Field contactNumberField = person.getClass() .getDeclaredField("contactNumber"); contactNumberField.setAccessible(true); long contactNumber = contactNumberField.getLong(person); - - Assertions.assertEquals(5555, uidNumber); - Assertions.assertEquals(452002, pinCode); Assertions.assertEquals(123456789L, contactNumber); + + } + + @Test + public void whenDoAutoboxing_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + Person person = new Person(); + + Field pinCodeField = person.getClass() + .getDeclaredField("pinCode"); + pinCodeField.setAccessible(true); + + Integer pinCode = pinCodeField.getInt(person); + Assertions.assertEquals(452002, pinCode); } @Test @@ -63,14 +62,13 @@ public class AccessPrivateFieldsUnitTest { heightField.setAccessible(true); float height = heightField.getFloat(person); + Assertions.assertEquals(6.1242f, height); Field weightField = person.getClass() .getDeclaredField("weight"); weightField.setAccessible(true); double weight = weightField.getDouble(person); - - Assertions.assertEquals(6.1242f, height); Assertions.assertEquals(75.2564, weight); } @@ -83,7 +81,6 @@ public class AccessPrivateFieldsUnitTest { genderField.setAccessible(true); char gender = genderField.getChar(person); - Assertions.assertEquals('M', gender); } @@ -96,10 +93,21 @@ public class AccessPrivateFieldsUnitTest { activeField.setAccessible(true); boolean active = activeField.getBoolean(person); - Assertions.assertTrue(active); } + @Test + public void whenGetObjectFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + Person person = new Person(); + + Field nameField = person.getClass() + .getDeclaredField("name"); + nameField.setAccessible(true); + + String name = (String) nameField.get(person); + Assertions.assertEquals("John", name); + } + @Test public void givenInt_whenGetStringField_thenIllegalArgumentException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { Person person = new Person(); From 5236d6ceddda702cde8c06e9ffef7975e871756a Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Sat, 27 Jun 2020 16:39:16 +0530 Subject: [PATCH 09/18] Condensed fields by removing extra space. --- .../baeldung/reflection/access/privatefields/Person.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java index 433dc7636d..4e2f0fc0cc 100755 --- a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java +++ b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java @@ -3,21 +3,13 @@ package com.baeldung.reflection.access.privatefields; public class Person { private String name = "John"; - private byte age = 30; - private short uidNumber = 5555; - private int pinCode = 452002; - private long contactNumber = 123456789L; - private float height = 6.1242f; - private double weight = 75.2564; - private char gender = 'M'; - private boolean active = true; public String getName() { From 0549f755b08b7f1c5b529d4cec42483d46a072f2 Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Mon, 29 Jun 2020 22:27:35 +0530 Subject: [PATCH 10/18] Added test case for widening. --- .../AccessPrivateFieldsUnitTest.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java index bf9e4ea591..5a2a33fa8f 100644 --- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java @@ -53,6 +53,18 @@ public class AccessPrivateFieldsUnitTest { Assertions.assertEquals(452002, pinCode); } + @Test + public void whenDoWidening_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + Person person = new Person(); + + Field pinCodeField = person.getClass() + .getDeclaredField("pinCode"); + pinCodeField.setAccessible(true); + + Long pinCode = pinCodeField.getLong(person); + Assertions.assertEquals(452002L, pinCode); + } + @Test public void whenGetFloatingTypeFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { Person person = new Person(); @@ -118,6 +130,16 @@ public class AccessPrivateFieldsUnitTest { Assertions.assertThrows(IllegalArgumentException.class, () -> nameField.getInt(person)); } + @Test + public void givenInt_whenGetLongField_thenIllegalArgumentException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + Person person = new Person(); + Field contactNumberField = person.getClass() + .getDeclaredField("contactNumber"); + contactNumberField.setAccessible(true); + + Assertions.assertThrows(IllegalArgumentException.class, () -> contactNumberField.getInt(person)); + } + @Test public void whenFieldNotSetAccessible_thenIllegalAccessException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { Person person = new Person(); @@ -132,7 +154,7 @@ public class AccessPrivateFieldsUnitTest { Person person = new Person(); Assertions.assertThrows(NoSuchFieldException.class, () -> person.getClass() - .getDeclaredField("genders")); + .getDeclaredField("firstName")); } @Test From 5e63ab27a1f0a60271fd77828da003350db98876 Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Sat, 4 Jul 2020 21:53:43 +0530 Subject: [PATCH 11/18] Refactored test cases to throw generic Exception --- .../AccessPrivateFieldsUnitTest.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java index 5a2a33fa8f..49e1b917b1 100644 --- a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java +++ b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java @@ -8,7 +8,7 @@ import org.junit.jupiter.api.Test; public class AccessPrivateFieldsUnitTest { @Test - public void whenGetIntegerFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void whenGetIntegerFields_thenSuccess() throws Exception { Person person = new Person(); Field ageField = person.getClass() @@ -42,7 +42,7 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void whenDoAutoboxing_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void whenDoAutoboxing_thenSuccess() throws Exception { Person person = new Person(); Field pinCodeField = person.getClass() @@ -54,7 +54,7 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void whenDoWidening_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void whenDoWidening_thenSuccess() throws Exception { Person person = new Person(); Field pinCodeField = person.getClass() @@ -66,7 +66,7 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void whenGetFloatingTypeFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void whenGetFloatingTypeFields_thenSuccess() throws Exception { Person person = new Person(); Field heightField = person.getClass() @@ -85,7 +85,7 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void whenGetCharacterFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void whenGetCharacterFields_thenSuccess() throws Exception { Person person = new Person(); Field genderField = person.getClass() @@ -97,7 +97,7 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void whenGetBooleanFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void whenGetBooleanFields_thenSuccess() throws Exception { Person person = new Person(); Field activeField = person.getClass() @@ -109,7 +109,7 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void whenGetObjectFields_thenSuccess() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void whenGetObjectFields_thenSuccess() throws Exception { Person person = new Person(); Field nameField = person.getClass() @@ -121,7 +121,7 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void givenInt_whenGetStringField_thenIllegalArgumentException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void givenInt_whenGetStringField_thenIllegalArgumentException() throws Exception { Person person = new Person(); Field nameField = person.getClass() .getDeclaredField("name"); @@ -131,7 +131,7 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void givenInt_whenGetLongField_thenIllegalArgumentException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void givenInt_whenGetLongField_thenIllegalArgumentException() throws Exception { Person person = new Person(); Field contactNumberField = person.getClass() .getDeclaredField("contactNumber"); @@ -141,7 +141,7 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void whenFieldNotSetAccessible_thenIllegalAccessException() throws IllegalAccessException, IllegalArgumentException, NoSuchFieldException, NullPointerException { + public void whenFieldNotSetAccessible_thenIllegalAccessException() throws Exception { Person person = new Person(); Field nameField = person.getClass() .getDeclaredField("name"); @@ -150,7 +150,7 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void whenAccessingWrongProperty_thenNoSuchFieldException() throws NoSuchFieldException, NullPointerException { + public void whenAccessingWrongProperty_thenNoSuchFieldException() throws Exception { Person person = new Person(); Assertions.assertThrows(NoSuchFieldException.class, () -> person.getClass() @@ -158,7 +158,7 @@ public class AccessPrivateFieldsUnitTest { } @Test - public void whenAccessingNullProperty_thenNullPointerException() throws NoSuchFieldException, NullPointerException { + public void whenAccessingNullProperty_thenNullPointerException() throws Exception { Person person = new Person(); Assertions.assertThrows(NullPointerException.class, () -> person.getClass() From 06dcb4ea6d3ad93a624fa103000d3d4ee8946abc Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Fri, 10 Jul 2020 20:06:12 +0530 Subject: [PATCH 12/18] Created new module core-java-reflection-2 --- .../core-java-reflection-2/pom.xml | 45 +++ .../access/privatefields/Person.java | 0 .../AccessPrivateFieldsUnitTest.java | 0 core-java-modules/pom.xml | 291 +++++++++--------- 4 files changed, 191 insertions(+), 145 deletions(-) create mode 100644 core-java-modules/core-java-reflection-2/pom.xml rename core-java-modules/{core-java-reflection => core-java-reflection-2}/src/main/java/com/baeldung/reflection/access/privatefields/Person.java (100%) rename core-java-modules/{core-java-reflection => core-java-reflection-2}/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java (100%) diff --git a/core-java-modules/core-java-reflection-2/pom.xml b/core-java-modules/core-java-reflection-2/pom.xml new file mode 100644 index 0000000000..d711dabd1a --- /dev/null +++ b/core-java-modules/core-java-reflection-2/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + core-java-reflection-2 + 0.1.0-SNAPSHOT + core-java-reflection-2 + jar + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../ + + + + core-java-reflection-2 + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${source.version} + ${target.version} + -parameters + + + + + + + 3.8.0 + 1.8 + 1.8 + + diff --git a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/privatefields/Person.java similarity index 100% rename from core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java rename to core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/privatefields/Person.java diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java similarity index 100% rename from core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java rename to core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 26c374b51d..272da94f5d 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -1,169 +1,170 @@ - - 4.0.0 - com.baeldung.core-java-modules - core-java-modules - core-java-modules - pom + + 4.0.0 + com.baeldung.core-java-modules + core-java-modules + core-java-modules + pom - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../parent-java - + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../parent-java + - - core-java - - - - - core-java-8 - core-java-8-2 + + core-java + + + + + core-java-8 + core-java-8-2 - - - - - + + + + + - core-java-annotations + core-java-annotations - core-java-arrays-sorting - core-java-arrays-guides - core-java-arrays-multidimensional - core-java-arrays-convert - core-java-arrays-operations-basic - core-java-arrays-operations-advanced - - core-java-collections - core-java-collections-2 - core-java-collections-3 - core-java-collections-array-list - core-java-collections-list - core-java-collections-list-2 - core-java-collections-list-3 - core-java-collections-maps - core-java-collections-maps-2 - core-java-collections-maps-3 - + core-java-arrays-sorting + core-java-arrays-guides + core-java-arrays-multidimensional + core-java-arrays-convert + core-java-arrays-operations-basic + core-java-arrays-operations-advanced - core-java-concurrency-2 - core-java-concurrency-advanced - core-java-concurrency-advanced-2 - core-java-concurrency-advanced-3 - core-java-concurrency-basic - core-java-concurrency-basic-2 - core-java-concurrency-collections + core-java-collections + core-java-collections-2 + core-java-collections-3 + core-java-collections-array-list + core-java-collections-list + core-java-collections-list-2 + core-java-collections-list-3 + core-java-collections-maps + core-java-collections-maps-2 + core-java-collections-maps-3 + - - core-java-date-operations-2 - - + core-java-concurrency-2 + core-java-concurrency-advanced + core-java-concurrency-advanced-2 + core-java-concurrency-advanced-3 + core-java-concurrency-basic + core-java-concurrency-basic-2 + core-java-concurrency-collections - core-java-exceptions - core-java-exceptions-2 + + core-java-date-operations-2 + + - core-java-function + core-java-exceptions + core-java-exceptions-2 - core-java-io - core-java-io-2 - core-java-io-apis - core-java-io-conversions - core-java-io-conversions-2 + core-java-function - core-java-jar - core-java-jndi - - core-java-jvm + core-java-io + core-java-io-2 + core-java-io-apis + core-java-io-conversions + core-java-io-conversions-2 - core-java-lambdas - core-java-lang - core-java-lang-2 - core-java-lang-math - core-java-lang-math-2 - core-java-lang-oop-constructors - core-java-lang-oop-patterns - core-java-lang-oop-generics - core-java-lang-oop-modifiers - core-java-lang-oop-types - core-java-lang-oop-inheritance - core-java-lang-oop-methods - core-java-lang-oop-others - core-java-lang-operators - core-java-lang-syntax - core-java-lang-syntax-2 + core-java-jar + core-java-jndi + + core-java-jvm - core-java-networking - core-java-networking-2 - core-java-nio - core-java-nio-2 + core-java-lambdas + core-java-lang + core-java-lang-2 + core-java-lang-math + core-java-lang-math-2 + core-java-lang-oop-constructors + core-java-lang-oop-patterns + core-java-lang-oop-generics + core-java-lang-oop-modifiers + core-java-lang-oop-types + core-java-lang-oop-inheritance + core-java-lang-oop-methods + core-java-lang-oop-others + core-java-lang-operators + core-java-lang-syntax + core-java-lang-syntax-2 - core-java-optional - + core-java-networking + core-java-networking-2 + core-java-nio + core-java-nio-2 - core-java-perf + core-java-optional + - core-java-reflection + core-java-perf - core-java-security - core-java-security-2 - core-java-streams - core-java-streams-2 - core-java-streams-3 - core-java-string-algorithms - core-java-string-algorithms-2 - core-java-string-algorithms-3 - core-java-string-apis - core-java-string-conversions - core-java-string-conversions-2 - core-java-string-operations - core-java-string-operations-2 - core-java-strings - core-java-sun + core-java-reflection + core-java-reflection-2 - core-java-regex - + core-java-security + core-java-security-2 + core-java-streams + core-java-streams-2 + core-java-streams-3 + core-java-string-algorithms + core-java-string-algorithms-2 + core-java-string-algorithms-3 + core-java-string-apis + core-java-string-conversions + core-java-string-conversions-2 + core-java-string-operations + core-java-string-operations-2 + core-java-strings + core-java-sun - - pre-jpms - + core-java-regex + - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - - + + pre-jpms + - - - - org.junit.jupiter - junit-jupiter - ${junit-jupiter.version} - test - - - org.junit.vintage - junit-vintage-engine - ${junit-jupiter.version} - test - - - + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + - - 2.22.2 - 5.6.2 - + + + + org.junit.jupiter + junit-jupiter + ${junit-jupiter.version} + test + + + org.junit.vintage + junit-vintage-engine + ${junit-jupiter.version} + test + + + + + + 2.22.2 + 5.6.2 + From a86a226237ce6fb412d555700c1820750a23c84d Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Fri, 10 Jul 2020 20:27:38 +0530 Subject: [PATCH 13/18] Revert "Created new module core-java-reflection-2" This reverts commit 06dcb4ea6d3ad93a624fa103000d3d4ee8946abc. --- .../core-java-reflection-2/pom.xml | 45 --- .../access/privatefields/Person.java | 0 .../AccessPrivateFieldsUnitTest.java | 0 core-java-modules/pom.xml | 291 +++++++++--------- 4 files changed, 145 insertions(+), 191 deletions(-) delete mode 100644 core-java-modules/core-java-reflection-2/pom.xml rename core-java-modules/{core-java-reflection-2 => core-java-reflection}/src/main/java/com/baeldung/reflection/access/privatefields/Person.java (100%) rename core-java-modules/{core-java-reflection-2 => core-java-reflection}/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java (100%) diff --git a/core-java-modules/core-java-reflection-2/pom.xml b/core-java-modules/core-java-reflection-2/pom.xml deleted file mode 100644 index d711dabd1a..0000000000 --- a/core-java-modules/core-java-reflection-2/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - core-java-reflection-2 - 0.1.0-SNAPSHOT - core-java-reflection-2 - jar - - com.baeldung.core-java-modules - core-java-modules - 0.0.1-SNAPSHOT - ../ - - - - core-java-reflection-2 - - - src/main/resources - true - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${source.version} - ${target.version} - -parameters - - - - - - - 3.8.0 - 1.8 - 1.8 - - diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/privatefields/Person.java b/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java similarity index 100% rename from core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/privatefields/Person.java rename to core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java diff --git a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java similarity index 100% rename from core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java rename to core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 272da94f5d..26c374b51d 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -1,170 +1,169 @@ - - 4.0.0 - com.baeldung.core-java-modules - core-java-modules - core-java-modules - pom + + 4.0.0 + com.baeldung.core-java-modules + core-java-modules + core-java-modules + pom - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../parent-java - + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../parent-java + - - core-java - - - - - core-java-8 - core-java-8-2 + + core-java + + + + + core-java-8 + core-java-8-2 - - - - - + + + + + - core-java-annotations + core-java-annotations - core-java-arrays-sorting - core-java-arrays-guides - core-java-arrays-multidimensional - core-java-arrays-convert - core-java-arrays-operations-basic - core-java-arrays-operations-advanced + core-java-arrays-sorting + core-java-arrays-guides + core-java-arrays-multidimensional + core-java-arrays-convert + core-java-arrays-operations-basic + core-java-arrays-operations-advanced + + core-java-collections + core-java-collections-2 + core-java-collections-3 + core-java-collections-array-list + core-java-collections-list + core-java-collections-list-2 + core-java-collections-list-3 + core-java-collections-maps + core-java-collections-maps-2 + core-java-collections-maps-3 + - core-java-collections - core-java-collections-2 - core-java-collections-3 - core-java-collections-array-list - core-java-collections-list - core-java-collections-list-2 - core-java-collections-list-3 - core-java-collections-maps - core-java-collections-maps-2 - core-java-collections-maps-3 - + core-java-concurrency-2 + core-java-concurrency-advanced + core-java-concurrency-advanced-2 + core-java-concurrency-advanced-3 + core-java-concurrency-basic + core-java-concurrency-basic-2 + core-java-concurrency-collections - core-java-concurrency-2 - core-java-concurrency-advanced - core-java-concurrency-advanced-2 - core-java-concurrency-advanced-3 - core-java-concurrency-basic - core-java-concurrency-basic-2 - core-java-concurrency-collections + + core-java-date-operations-2 + + - - core-java-date-operations-2 - - + core-java-exceptions + core-java-exceptions-2 - core-java-exceptions - core-java-exceptions-2 + core-java-function - core-java-function + core-java-io + core-java-io-2 + core-java-io-apis + core-java-io-conversions + core-java-io-conversions-2 - core-java-io - core-java-io-2 - core-java-io-apis - core-java-io-conversions - core-java-io-conversions-2 + core-java-jar + core-java-jndi + + core-java-jvm - core-java-jar - core-java-jndi - - core-java-jvm + core-java-lambdas + core-java-lang + core-java-lang-2 + core-java-lang-math + core-java-lang-math-2 + core-java-lang-oop-constructors + core-java-lang-oop-patterns + core-java-lang-oop-generics + core-java-lang-oop-modifiers + core-java-lang-oop-types + core-java-lang-oop-inheritance + core-java-lang-oop-methods + core-java-lang-oop-others + core-java-lang-operators + core-java-lang-syntax + core-java-lang-syntax-2 - core-java-lambdas - core-java-lang - core-java-lang-2 - core-java-lang-math - core-java-lang-math-2 - core-java-lang-oop-constructors - core-java-lang-oop-patterns - core-java-lang-oop-generics - core-java-lang-oop-modifiers - core-java-lang-oop-types - core-java-lang-oop-inheritance - core-java-lang-oop-methods - core-java-lang-oop-others - core-java-lang-operators - core-java-lang-syntax - core-java-lang-syntax-2 + core-java-networking + core-java-networking-2 + core-java-nio + core-java-nio-2 - core-java-networking - core-java-networking-2 - core-java-nio - core-java-nio-2 + core-java-optional + - core-java-optional - + core-java-perf - core-java-perf + core-java-reflection - core-java-reflection - core-java-reflection-2 + core-java-security + core-java-security-2 + core-java-streams + core-java-streams-2 + core-java-streams-3 + core-java-string-algorithms + core-java-string-algorithms-2 + core-java-string-algorithms-3 + core-java-string-apis + core-java-string-conversions + core-java-string-conversions-2 + core-java-string-operations + core-java-string-operations-2 + core-java-strings + core-java-sun - core-java-security - core-java-security-2 - core-java-streams - core-java-streams-2 - core-java-streams-3 - core-java-string-algorithms - core-java-string-algorithms-2 - core-java-string-algorithms-3 - core-java-string-apis - core-java-string-conversions - core-java-string-conversions-2 - core-java-string-operations - core-java-string-operations-2 - core-java-strings - core-java-sun + core-java-regex + - core-java-regex - + + pre-jpms + - - pre-jpms - + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - - + + + + org.junit.jupiter + junit-jupiter + ${junit-jupiter.version} + test + + + org.junit.vintage + junit-vintage-engine + ${junit-jupiter.version} + test + + + - - - - org.junit.jupiter - junit-jupiter - ${junit-jupiter.version} - test - - - org.junit.vintage - junit-vintage-engine - ${junit-jupiter.version} - test - - - - - - 2.22.2 - 5.6.2 - + + 2.22.2 + 5.6.2 + From 2fa700d339d9a9d2ab499c26875559dffdd24c4c Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Fri, 10 Jul 2020 20:47:46 +0530 Subject: [PATCH 14/18] Added new module core-java-reflection-2 --- .../core-java-reflection-2/README.MD | 3 ++ .../core-java-reflection-2/pom.xml | 44 +++++++++++++++++++ .../access/privatefields/Person.java | 0 .../AccessPrivateFieldsUnitTest.java | 0 core-java-modules/pom.xml | 1 + 5 files changed, 48 insertions(+) create mode 100644 core-java-modules/core-java-reflection-2/README.MD create mode 100644 core-java-modules/core-java-reflection-2/pom.xml rename core-java-modules/{core-java-reflection => core-java-reflection-2}/src/main/java/com/baeldung/reflection/access/privatefields/Person.java (100%) rename core-java-modules/{core-java-reflection => core-java-reflection-2}/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java (100%) diff --git a/core-java-modules/core-java-reflection-2/README.MD b/core-java-modules/core-java-reflection-2/README.MD new file mode 100644 index 0000000000..7658851a4d --- /dev/null +++ b/core-java-modules/core-java-reflection-2/README.MD @@ -0,0 +1,3 @@ +## Relevant Articles + +- [Reading the Value of 'private' Fields from a Different Class in Java](https://www.baeldung.com/) \ No newline at end of file diff --git a/core-java-modules/core-java-reflection-2/pom.xml b/core-java-modules/core-java-reflection-2/pom.xml new file mode 100644 index 0000000000..17cad52271 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + core-java-reflection-2 + 0.1.0-SNAPSHOT + core-java-reflection-2 + jar + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../ + + + + core-java-reflection-2 + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${source.version} + ${target.version} + -parameters + + + + + + + 3.8.0 + 1.8 + 1.8 + + \ No newline at end of file diff --git a/core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/privatefields/Person.java similarity index 100% rename from core-java-modules/core-java-reflection/src/main/java/com/baeldung/reflection/access/privatefields/Person.java rename to core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/privatefields/Person.java diff --git a/core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java similarity index 100% rename from core-java-modules/core-java-reflection/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java rename to core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index d01a7cc792..4f26c194ee 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -110,6 +110,7 @@ core-java-perf core-java-reflection + core-java-reflection-2 core-java-security core-java-security-2 From 748c9cf1e450e81e80b67180cde7167de379b953 Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Sun, 12 Jul 2020 12:28:38 +0530 Subject: [PATCH 15/18] Removed README.MD --- .../core-java-reflection-2/README.MD | 3 - .../core-java-reflection-2/pom.xml | 80 +++++++++---------- 2 files changed, 40 insertions(+), 43 deletions(-) delete mode 100644 core-java-modules/core-java-reflection-2/README.MD diff --git a/core-java-modules/core-java-reflection-2/README.MD b/core-java-modules/core-java-reflection-2/README.MD deleted file mode 100644 index 7658851a4d..0000000000 --- a/core-java-modules/core-java-reflection-2/README.MD +++ /dev/null @@ -1,3 +0,0 @@ -## Relevant Articles - -- [Reading the Value of 'private' Fields from a Different Class in Java](https://www.baeldung.com/) \ No newline at end of file diff --git a/core-java-modules/core-java-reflection-2/pom.xml b/core-java-modules/core-java-reflection-2/pom.xml index 17cad52271..ea76ee8c98 100644 --- a/core-java-modules/core-java-reflection-2/pom.xml +++ b/core-java-modules/core-java-reflection-2/pom.xml @@ -1,44 +1,44 @@ - 4.0.0 - core-java-reflection-2 - 0.1.0-SNAPSHOT - core-java-reflection-2 - jar - - com.baeldung.core-java-modules - core-java-modules - 0.0.1-SNAPSHOT - ../ - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + core-java-reflection-2 + 0.1.0-SNAPSHOT + core-java-reflection-2 + jar + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../ + + + + core-java-reflection-2 + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${source.version} + ${target.version} + -parameters + + + + - - core-java-reflection-2 - - - src/main/resources - true - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${source.version} - ${target.version} - -parameters - - - - - - - 3.8.0 - 1.8 - 1.8 - + + 3.8.0 + 1.8 + 1.8 + \ No newline at end of file From 0a2f6a4615f6f751942e1f8a6da477c02a42316c Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Fri, 24 Jul 2020 20:13:23 +0530 Subject: [PATCH 16/18] Added code to set a field using Reflection. --- .../reflection/set/fields/Person.java | 87 +++++++++ .../SetFieldsUsingReflectionUnitTest.java | 182 ++++++++++++++++++ 2 files changed, 269 insertions(+) create mode 100644 core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/set/fields/Person.java create mode 100644 core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/set/fields/Person.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/set/fields/Person.java new file mode 100644 index 0000000000..6bdfc58d78 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/set/fields/Person.java @@ -0,0 +1,87 @@ +package com.baeldung.reflection.set.fields; + +public class Person { + + private String name; + private byte age; + private short uidNumber; + private int pinCode; + private long contactNumber; + private float height; + private double weight; + private char gender; + private boolean active; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public byte getAge() { + return age; + } + + public void setAge(byte age) { + this.age = age; + } + + public short getUidNumber() { + return uidNumber; + } + + public void setUidNumber(short uidNumber) { + this.uidNumber = uidNumber; + } + + public int getPinCode() { + return pinCode; + } + + public void setPinCode(int pinCode) { + this.pinCode = pinCode; + } + + public long getContactNumber() { + return contactNumber; + } + + public void setContactNumber(long contactNumber) { + this.contactNumber = contactNumber; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + + public double getWeight() { + return weight; + } + + public void setWeight(double weight) { + this.weight = weight; + } + + public char getGender() { + return gender; + } + + public void setGender(char gender) { + this.gender = gender; + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } + +} diff --git a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java new file mode 100644 index 0000000000..18a378cf07 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java @@ -0,0 +1,182 @@ +package com.baeldung.reflection.set.fields; + +import java.lang.reflect.Field; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class SetFieldsUsingReflectionUnitTest { + + @Test + public void whenSetIntegerFields_thenSuccess() throws Exception { + Person person = new Person(); + + Field ageField = person.getClass() + .getDeclaredField("age"); + ageField.setAccessible(true); + + byte age = 26; + ageField.setByte(person, age); + Assertions.assertEquals(26, person.getAge()); + + Field uidNumberField = person.getClass() + .getDeclaredField("uidNumber"); + uidNumberField.setAccessible(true); + + short uidNumber = 5555; + uidNumberField.setShort(person, uidNumber); + Assertions.assertEquals(5555, person.getUidNumber()); + + Field pinCodeField = person.getClass() + .getDeclaredField("pinCode"); + pinCodeField.setAccessible(true); + + int pinCode = 411057; + pinCodeField.setInt(person, pinCode); + Assertions.assertEquals(411057, person.getPinCode()); + + Field contactNumberField = person.getClass() + .getDeclaredField("contactNumber"); + contactNumberField.setAccessible(true); + + long contactNumber = 123456789L; + contactNumberField.setLong(person, contactNumber); + Assertions.assertEquals(123456789L, person.getContactNumber()); + + } + + @Test + public void whenDoUnboxing_thenSuccess() throws Exception { + Person person = new Person(); + + Field pinCodeField = person.getClass() + .getDeclaredField("pinCode"); + pinCodeField.setAccessible(true); + + Integer pinCode = 411057; + pinCodeField.setInt(person, pinCode); + Assertions.assertEquals(411057, person.getPinCode()); + } + + @Test + public void whenDoNarrowing_thenSuccess() throws Exception { + Person person = new Person(); + + Field pinCodeField = person.getClass() + .getDeclaredField("pinCode"); + pinCodeField.setAccessible(true); + + Short pinCode = 4110; + pinCodeField.setInt(person, pinCode); + Assertions.assertEquals(4110, person.getPinCode()); + } + + @Test + public void whenSetFloatingTypeFields_thenSuccess() throws Exception { + Person person = new Person(); + + Field heightField = person.getClass() + .getDeclaredField("height"); + heightField.setAccessible(true); + + float height = 6.1242f; + heightField.setFloat(person, height); + Assertions.assertEquals(6.1242f, person.getHeight()); + + Field weightField = person.getClass() + .getDeclaredField("weight"); + weightField.setAccessible(true); + + double weight = 75.2564; + weightField.setDouble(person, weight); + Assertions.assertEquals(75.2564, person.getWeight()); + } + + @Test + public void whenSetCharacterFields_thenSuccess() throws Exception { + Person person = new Person(); + + Field genderField = person.getClass() + .getDeclaredField("gender"); + genderField.setAccessible(true); + + char gender = 'M'; + genderField.setChar(person, gender); + Assertions.assertEquals('M', person.getGender()); + } + + @Test + public void whenSetBooleanFields_thenSuccess() throws Exception { + Person person = new Person(); + + Field activeField = person.getClass() + .getDeclaredField("active"); + activeField.setAccessible(true); + + boolean active = true; + activeField.setBoolean(person, active); + Assertions.assertTrue(person.isActive()); + } + + @Test + public void whenSetObjectFields_thenSuccess() throws Exception { + Person person = new Person(); + + Field nameField = person.getClass() + .getDeclaredField("name"); + nameField.setAccessible(true); + + String name = "Umang Budhwar"; + nameField.set(person, name); + Assertions.assertEquals("Umang Budhwar", person.getName()); + } + + @Test + public void givenInt_whenSetStringField_thenIllegalArgumentException() throws Exception { + Person person = new Person(); + Field nameField = person.getClass() + .getDeclaredField("name"); + nameField.setAccessible(true); + + Assertions.assertThrows(IllegalArgumentException.class, () -> nameField.setInt(person, 26)); + } + + @Test + public void givenInt_whenSetLongField_thenIllegalArgumentException() throws Exception { + Person person = new Person(); + + Field pinCodeField = person.getClass() + .getDeclaredField("pinCode"); + pinCodeField.setAccessible(true); + + long pinCode = 411057L; + + Assertions.assertThrows(IllegalArgumentException.class, () -> pinCodeField.setLong(person, pinCode)); + } + + @Test + public void whenFieldNotSetAccessible_thenIllegalAccessException() throws Exception { + Person person = new Person(); + Field nameField = person.getClass() + .getDeclaredField("name"); + + Assertions.assertThrows(IllegalAccessException.class, () -> nameField.set(person, "Umang Budhwar")); + } + + @Test + public void whenAccessingWrongProperty_thenNoSuchFieldException() throws Exception { + Person person = new Person(); + + Assertions.assertThrows(NoSuchFieldException.class, () -> person.getClass() + .getDeclaredField("firstName")); + } + + @Test + public void whenAccessingNullProperty_thenNullPointerException() throws Exception { + Person person = new Person(); + + Assertions.assertThrows(NullPointerException.class, () -> person.getClass() + .getDeclaredField(null)); + } + +} From 7ec5e6824e7dfcaf3022fe4a0f4bc9d43a4a497e Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Sun, 2 Aug 2020 22:36:02 +0530 Subject: [PATCH 17/18] Refactored code to use short primitive instead of Short wrapper class. --- .../reflection/set/fields/Person.java | 87 ------------------- .../SetFieldsUsingReflectionUnitTest.java | 4 +- 2 files changed, 3 insertions(+), 88 deletions(-) delete mode 100644 core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/set/fields/Person.java diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/set/fields/Person.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/set/fields/Person.java deleted file mode 100644 index 6bdfc58d78..0000000000 --- a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/set/fields/Person.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.baeldung.reflection.set.fields; - -public class Person { - - private String name; - private byte age; - private short uidNumber; - private int pinCode; - private long contactNumber; - private float height; - private double weight; - private char gender; - private boolean active; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public byte getAge() { - return age; - } - - public void setAge(byte age) { - this.age = age; - } - - public short getUidNumber() { - return uidNumber; - } - - public void setUidNumber(short uidNumber) { - this.uidNumber = uidNumber; - } - - public int getPinCode() { - return pinCode; - } - - public void setPinCode(int pinCode) { - this.pinCode = pinCode; - } - - public long getContactNumber() { - return contactNumber; - } - - public void setContactNumber(long contactNumber) { - this.contactNumber = contactNumber; - } - - public float getHeight() { - return height; - } - - public void setHeight(float height) { - this.height = height; - } - - public double getWeight() { - return weight; - } - - public void setWeight(double weight) { - this.weight = weight; - } - - public char getGender() { - return gender; - } - - public void setGender(char gender) { - this.gender = gender; - } - - public boolean isActive() { - return active; - } - - public void setActive(boolean active) { - this.active = active; - } - -} diff --git a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java index 18a378cf07..8931d22160 100644 --- a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java +++ b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java @@ -5,6 +5,8 @@ import java.lang.reflect.Field; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.baeldung.reflection.access.privatefields.Person; + public class SetFieldsUsingReflectionUnitTest { @Test @@ -66,7 +68,7 @@ public class SetFieldsUsingReflectionUnitTest { .getDeclaredField("pinCode"); pinCodeField.setAccessible(true); - Short pinCode = 4110; + short pinCode = 4110; pinCodeField.setInt(person, pinCode); Assertions.assertEquals(4110, person.getPinCode()); } From a27969cc707f4883f2737027cf0240ebce2d06ae Mon Sep 17 00:00:00 2001 From: Umang Budhwar Date: Mon, 3 Aug 2020 21:01:57 +0530 Subject: [PATCH 18/18] Refactored code to use existing variables. --- .../SetFieldsUsingReflectionUnitTest.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java index 8931d22160..3fe6994041 100644 --- a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java +++ b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/set/fields/SetFieldsUsingReflectionUnitTest.java @@ -19,7 +19,7 @@ public class SetFieldsUsingReflectionUnitTest { byte age = 26; ageField.setByte(person, age); - Assertions.assertEquals(26, person.getAge()); + Assertions.assertEquals(age, person.getAge()); Field uidNumberField = person.getClass() .getDeclaredField("uidNumber"); @@ -27,7 +27,7 @@ public class SetFieldsUsingReflectionUnitTest { short uidNumber = 5555; uidNumberField.setShort(person, uidNumber); - Assertions.assertEquals(5555, person.getUidNumber()); + Assertions.assertEquals(uidNumber, person.getUidNumber()); Field pinCodeField = person.getClass() .getDeclaredField("pinCode"); @@ -35,7 +35,7 @@ public class SetFieldsUsingReflectionUnitTest { int pinCode = 411057; pinCodeField.setInt(person, pinCode); - Assertions.assertEquals(411057, person.getPinCode()); + Assertions.assertEquals(pinCode, person.getPinCode()); Field contactNumberField = person.getClass() .getDeclaredField("contactNumber"); @@ -43,7 +43,7 @@ public class SetFieldsUsingReflectionUnitTest { long contactNumber = 123456789L; contactNumberField.setLong(person, contactNumber); - Assertions.assertEquals(123456789L, person.getContactNumber()); + Assertions.assertEquals(contactNumber, person.getContactNumber()); } @@ -57,7 +57,7 @@ public class SetFieldsUsingReflectionUnitTest { Integer pinCode = 411057; pinCodeField.setInt(person, pinCode); - Assertions.assertEquals(411057, person.getPinCode()); + Assertions.assertEquals(pinCode, person.getPinCode()); } @Test @@ -70,7 +70,7 @@ public class SetFieldsUsingReflectionUnitTest { short pinCode = 4110; pinCodeField.setInt(person, pinCode); - Assertions.assertEquals(4110, person.getPinCode()); + Assertions.assertEquals(pinCode, person.getPinCode()); } @Test @@ -83,7 +83,7 @@ public class SetFieldsUsingReflectionUnitTest { float height = 6.1242f; heightField.setFloat(person, height); - Assertions.assertEquals(6.1242f, person.getHeight()); + Assertions.assertEquals(height, person.getHeight()); Field weightField = person.getClass() .getDeclaredField("weight"); @@ -91,7 +91,7 @@ public class SetFieldsUsingReflectionUnitTest { double weight = 75.2564; weightField.setDouble(person, weight); - Assertions.assertEquals(75.2564, person.getWeight()); + Assertions.assertEquals(weight, person.getWeight()); } @Test @@ -104,7 +104,7 @@ public class SetFieldsUsingReflectionUnitTest { char gender = 'M'; genderField.setChar(person, gender); - Assertions.assertEquals('M', person.getGender()); + Assertions.assertEquals(gender, person.getGender()); } @Test @@ -115,8 +115,7 @@ public class SetFieldsUsingReflectionUnitTest { .getDeclaredField("active"); activeField.setAccessible(true); - boolean active = true; - activeField.setBoolean(person, active); + activeField.setBoolean(person, true); Assertions.assertTrue(person.isActive()); } @@ -130,7 +129,7 @@ public class SetFieldsUsingReflectionUnitTest { String name = "Umang Budhwar"; nameField.set(person, name); - Assertions.assertEquals("Umang Budhwar", person.getName()); + Assertions.assertEquals(name, person.getName()); } @Test