Skip to content

Commit 69e29b3

Browse files
authored
Merge pull request #6169 from FDPro/bael-2424
dupirefr/dupire.francois+pro@gmail.com [BAEL-2424] Removed order checking + filtering public and protected fields
2 parents d9cf2c0 + 2acd1e2 commit 69e29b3

3 files changed

Lines changed: 77 additions & 55 deletions

File tree

core-java/src/main/java/com/baeldung/reflection/MonthEmployee.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
public class MonthEmployee extends Employee {
44

5-
private double reward;
5+
protected double reward;
66

77
}

core-java/src/main/java/com/baeldung/reflection/Person.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public class Person {
44

5-
public String lastName;
5+
protected String lastName;
66
private String firstName;
77

88
}

core-java/src/test/java/com/baeldung/reflection/PersonAndEmployeeReflectionUnitTest.java

Lines changed: 75 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
import org.junit.Test;
44

55
import java.lang.reflect.Field;
6+
import java.lang.reflect.Modifier;
67
import java.util.ArrayList;
78
import java.util.Arrays;
89
import java.util.Collections;
910
import java.util.List;
11+
import java.util.stream.Collectors;
12+
import java.util.stream.Stream;
1013

1114
import static org.junit.Assert.*;
1215

@@ -26,43 +29,46 @@ public void givenPersonClass_whenGetDeclaredFields_thenTwoFields() {
2629
// Then
2730
assertEquals(2, allFields.length);
2831

29-
Field lastNameField = allFields[0];
30-
assertEquals(LAST_NAME_FIELD, lastNameField.getName());
31-
assertEquals(String.class, lastNameField.getType());
32-
33-
Field firstNameField = allFields[1];
34-
assertEquals(FIRST_NAME_FIELD, firstNameField.getName());
35-
assertEquals(String.class, firstNameField.getType());
32+
assertTrue(Arrays.stream(allFields).anyMatch(field ->
33+
field.getName().equals(LAST_NAME_FIELD)
34+
&& field.getType().equals(String.class))
35+
);
36+
assertTrue(Arrays.stream(allFields).anyMatch(field ->
37+
field.getName().equals(FIRST_NAME_FIELD)
38+
&& field.getType().equals(String.class))
39+
);
3640
}
3741

3842
@Test
39-
public void givenEmployeeClass_whenSuperClassGetDeclaredFields_thenOneField() {
43+
public void givenEmployeeClass_whenGetDeclaredFields_thenOneField() {
4044
// When
41-
Field[] allFields = Employee.class.getSuperclass().getDeclaredFields();
45+
Field[] allFields = Employee.class.getDeclaredFields();
4246

4347
// Then
44-
assertEquals(2, allFields.length);
45-
46-
Field lastNameField = allFields[0];
47-
assertEquals(LAST_NAME_FIELD, lastNameField.getName());
48-
assertEquals(String.class, lastNameField.getType());
48+
assertEquals(1, allFields.length);
4949

50-
Field firstNameField = allFields[1];
51-
assertEquals(FIRST_NAME_FIELD, firstNameField.getName());
52-
assertEquals(String.class, firstNameField.getType());
50+
assertTrue(Arrays.stream(allFields).anyMatch(field ->
51+
field.getName().equals(EMPLOYEE_ID_FIELD)
52+
&& field.getType().equals(int.class))
53+
);
5354
}
5455

5556
@Test
56-
public void givenEmployeeClass_whenGetDeclaredFields_thenOneField() {
57+
public void givenEmployeeClass_whenSuperClassGetDeclaredFields_thenOneField() {
5758
// When
58-
Field[] allFields = Employee.class.getDeclaredFields();
59+
Field[] allFields = Employee.class.getSuperclass().getDeclaredFields();
5960

6061
// Then
61-
assertEquals(1, allFields.length);
62+
assertEquals(2, allFields.length);
6263

63-
Field employeeIdField = allFields[0];
64-
assertEquals(EMPLOYEE_ID_FIELD, employeeIdField.getName());
65-
assertEquals(int.class, employeeIdField.getType());
64+
assertTrue(Arrays.stream(allFields).anyMatch(field ->
65+
field.getName().equals(LAST_NAME_FIELD)
66+
&& field.getType().equals(String.class))
67+
);
68+
assertTrue(Arrays.stream(allFields).anyMatch(field ->
69+
field.getName().equals(FIRST_NAME_FIELD)
70+
&& field.getType().equals(String.class))
71+
);
6672
}
6773

6874
@Test
@@ -76,52 +82,68 @@ public void givenEmployeeClass_whenGetDeclaredFieldsOnBothClasses_thenThreeField
7682
// Then
7783
assertEquals(3, allFields.length);
7884

79-
Field lastNameField = allFields[0];
80-
assertEquals(LAST_NAME_FIELD, lastNameField.getName());
81-
assertEquals(String.class, lastNameField.getType());
82-
83-
Field firstNameField = allFields[1];
84-
assertEquals(FIRST_NAME_FIELD, firstNameField.getName());
85-
assertEquals(String.class, firstNameField.getType());
86-
87-
Field employeeIdField = allFields[2];
88-
assertEquals(EMPLOYEE_ID_FIELD, employeeIdField.getName());
89-
assertEquals(int.class, employeeIdField.getType());
85+
assertTrue(Arrays.stream(allFields).anyMatch(field ->
86+
field.getName().equals(LAST_NAME_FIELD)
87+
&& field.getType().equals(String.class))
88+
);
89+
assertTrue(Arrays.stream(allFields).anyMatch(field ->
90+
field.getName().equals(FIRST_NAME_FIELD)
91+
&& field.getType().equals(String.class))
92+
);
93+
assertTrue(Arrays.stream(allFields).anyMatch(field ->
94+
field.getName().equals(EMPLOYEE_ID_FIELD)
95+
&& field.getType().equals(int.class))
96+
);
9097
}
9198

9299
@Test
93-
public void givenMonthEmployeeClass_whenGetAllFields_thenFourFields() {
100+
public void givenEmployeeClass_whenGetDeclaredFieldsOnEmployeeSuperclassWithModifiersFilter_thenOneFields() {
94101
// When
95-
List<Field> allFields = getAllFields(MonthEmployee.class);
102+
List<Field> personFields = Arrays.stream(Employee.class.getSuperclass().getDeclaredFields())
103+
.filter(f -> Modifier.isPublic(f.getModifiers()) || Modifier.isProtected(f.getModifiers()))
104+
.collect(Collectors.toList());
96105

97106
// Then
98-
assertEquals(4, allFields.size());
99-
100-
Field lastNameField = allFields.get(0);
101-
assertEquals(LAST_NAME_FIELD, lastNameField.getName());
102-
assertEquals(String.class, lastNameField.getType());
107+
assertEquals(1, personFields.size());
103108

104-
Field firstNameField = allFields.get(1);
105-
assertEquals(FIRST_NAME_FIELD, firstNameField.getName());
106-
assertEquals(String.class, firstNameField.getType());
109+
assertTrue(personFields.stream().anyMatch(field ->
110+
field.getName().equals(LAST_NAME_FIELD)
111+
&& field.getType().equals(String.class))
112+
);
113+
}
107114

108-
Field employeeIdField = allFields.get(2);
109-
assertEquals(EMPLOYEE_ID_FIELD, employeeIdField.getName());
110-
assertEquals(int.class, employeeIdField.getType());
115+
@Test
116+
public void givenMonthEmployeeClass_whenGetAllFields_thenThreeFields() {
117+
// When
118+
List<Field> allFields = getAllFields(MonthEmployee.class);
111119

112-
Field monthEmployeeRewardField = allFields.get(3);
113-
assertEquals(MONTH_EMPLOYEE_REWARD_FIELD, monthEmployeeRewardField.getName());
114-
assertEquals(double.class, monthEmployeeRewardField.getType());
120+
// Then
121+
assertEquals(3, allFields.size());
122+
123+
assertTrue(allFields.stream().anyMatch(field ->
124+
field.getName().equals(LAST_NAME_FIELD)
125+
&& field.getType().equals(String.class))
126+
);
127+
assertTrue(allFields.stream().anyMatch(field ->
128+
field.getName().equals(EMPLOYEE_ID_FIELD)
129+
&& field.getType().equals(int.class))
130+
);
131+
assertTrue(allFields.stream().anyMatch(field ->
132+
field.getName().equals(MONTH_EMPLOYEE_REWARD_FIELD)
133+
&& field.getType().equals(double.class))
134+
);
115135
}
116136

117137
public List<Field> getAllFields(Class clazz) {
118138
if (clazz == null) {
119139
return Collections.emptyList();
120140
}
121141

122-
List<Field> result = new ArrayList<>();
123-
result.addAll(getAllFields(clazz.getSuperclass()));
124-
result.addAll(Arrays.asList(clazz.getDeclaredFields()));
142+
List<Field> result = new ArrayList<>(getAllFields(clazz.getSuperclass()));
143+
List<Field> filteredFields = Arrays.stream(clazz.getDeclaredFields())
144+
.filter(f -> Modifier.isPublic(f.getModifiers()) || Modifier.isProtected(f.getModifiers()))
145+
.collect(Collectors.toList());
146+
result.addAll(filteredFields);
125147
return result;
126148
}
127149

0 commit comments

Comments
 (0)