Java 11 - Nest Based Access Control
Java 11 introduced a concept of nested class where we can declare a class within a class. This nesting of classes allows to logically group the classes to be used in one place, making them more readable and maintainable. Nested class can be of four types
Static nested classes
Non-static nested classes
Local classes
Anonymous classes
Java 11 also provide the concept of nestmate to allow communication and verification of nested classes.
Consider the following example
ApiTester.java
import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;
public class APITester {
public static void main(String[] args) {
boolean isNestMate = APITester.class.isNestmateOf(APITester.Inner.class);
boolean nestHost = APITester.Inner.class.getNestHost() == APITester.class;
System.out.println(isNestMate);
System.out.println(nestHost);
Set<String> nestedMembers = Arrays.stream(APITester.Inner.class.getNestMembers())
.map(Class::getName)
.collect(Collectors.toSet());
System.out.println(nestedMembers);
}
public class Inner{}
}
Output
true true [APITester$Inner, APITester]