BAEL-4089: Accesing private properties of a class in Java (#9441)
* Added code to access private properties of a class * Removed abstractions to increase simplicity. * Added unit test cases in givenX_whenY_thenZ format. * Included test cases for NoSuchFieldException, NoSuchMethodException and NullPointerException. * Added new test case for IllegalArgumentException * Removed test cases for getting private methods * Added test cases for accessing all data types. * Segregated test cases for primitive and object types. Added test case for Autoboxing. * Condensed fields by removing extra space. * Added test case for widening. * Refactored test cases to throw generic Exception * Created new module core-java-reflection-2 * Revert "Created new module core-java-reflection-2" This reverts commit 9568663bb2e176eacc2119e605be76577f90b9c6. * Added new module core-java-reflection-2 * Removed README.MD
This commit is contained in:
parent
0012e59ebd
commit
1a8969f376
|
@ -0,0 +1,44 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
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">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>core-java-reflection-2</artifactId>
|
||||||
|
<version>0.1.0-SNAPSHOT</version>
|
||||||
|
<name>core-java-reflection-2</name>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.baeldung.core-java-modules</groupId>
|
||||||
|
<artifactId>core-java-modules</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<relativePath>../</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<finalName>core-java-reflection-2</finalName>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>${maven-compiler-plugin.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<source>${source.version}</source>
|
||||||
|
<target>${target.version}</target>
|
||||||
|
<compilerArgument>-parameters</compilerArgument>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
|
||||||
|
<source.version>1.8</source.version>
|
||||||
|
<target.version>1.8</target.version>
|
||||||
|
</properties>
|
||||||
|
</project>
|
|
@ -0,0 +1,87 @@
|
||||||
|
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() {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,168 @@
|
||||||
|
package com.baeldung.reflection.access.privatefields;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class AccessPrivateFieldsUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenGetIntegerFields_thenSuccess() throws Exception {
|
||||||
|
Person person = new Person();
|
||||||
|
|
||||||
|
Field ageField = person.getClass()
|
||||||
|
.getDeclaredField("age");
|
||||||
|
ageField.setAccessible(true);
|
||||||
|
|
||||||
|
byte age = ageField.getByte(person);
|
||||||
|
Assertions.assertEquals(30, age);
|
||||||
|
|
||||||
|
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(123456789L, contactNumber);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDoAutoboxing_thenSuccess() throws Exception {
|
||||||
|
Person person = new Person();
|
||||||
|
|
||||||
|
Field pinCodeField = person.getClass()
|
||||||
|
.getDeclaredField("pinCode");
|
||||||
|
pinCodeField.setAccessible(true);
|
||||||
|
|
||||||
|
Integer pinCode = pinCodeField.getInt(person);
|
||||||
|
Assertions.assertEquals(452002, pinCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDoWidening_thenSuccess() throws Exception {
|
||||||
|
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 Exception {
|
||||||
|
Person person = new Person();
|
||||||
|
|
||||||
|
Field heightField = person.getClass()
|
||||||
|
.getDeclaredField("height");
|
||||||
|
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(75.2564, weight);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenGetCharacterFields_thenSuccess() throws Exception {
|
||||||
|
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 Exception {
|
||||||
|
Person person = new Person();
|
||||||
|
|
||||||
|
Field activeField = person.getClass()
|
||||||
|
.getDeclaredField("active");
|
||||||
|
activeField.setAccessible(true);
|
||||||
|
|
||||||
|
boolean active = activeField.getBoolean(person);
|
||||||
|
Assertions.assertTrue(active);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenGetObjectFields_thenSuccess() throws Exception {
|
||||||
|
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 Exception {
|
||||||
|
Person person = new Person();
|
||||||
|
Field nameField = person.getClass()
|
||||||
|
.getDeclaredField("name");
|
||||||
|
nameField.setAccessible(true);
|
||||||
|
|
||||||
|
Assertions.assertThrows(IllegalArgumentException.class, () -> nameField.getInt(person));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenInt_whenGetLongField_thenIllegalArgumentException() throws Exception {
|
||||||
|
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 Exception {
|
||||||
|
Person person = new Person();
|
||||||
|
Field nameField = person.getClass()
|
||||||
|
.getDeclaredField("name");
|
||||||
|
|
||||||
|
Assertions.assertThrows(IllegalAccessException.class, () -> nameField.get(person));
|
||||||
|
}
|
||||||
|
|
||||||
|
@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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -111,6 +111,7 @@
|
||||||
<module>core-java-perf</module>
|
<module>core-java-perf</module>
|
||||||
|
|
||||||
<module>core-java-reflection</module>
|
<module>core-java-reflection</module>
|
||||||
|
<module>core-java-reflection-2</module>
|
||||||
|
|
||||||
<module>core-java-security</module>
|
<module>core-java-security</module>
|
||||||
<module>core-java-security-2</module>
|
<module>core-java-security-2</module>
|
||||||
|
|
Loading…
Reference in New Issue