Классы Field (поле класса), Method (метод класса) и Constructor (конструктор класса) имеют метод getModifiers(),
который возвращает целое число с различными включенными и выключенными битами, которые описывают используемые модификаторы, такие как public и
static. Затем можно использовать статические методы класса Modifier для анализа целого числа, возвращаемого getModifiers():
boolean isAbstract(int mod): возвращает true, если параметр mod содержит модификатор abstract
boolean isFinal(int mod): возвращает true, если параметр mod содержит модификатор final
boolean isInterface(int mod): возвращает true, если параметр mod содержит модификатор interface
boolean isNative(int mod): возвращает true, если параметр mod содержит модификатор native
boolean isPrivate(int mod): возвращает true, если параметр mod содержит модификатор private
boolean isProtected(int mod): возвращает true, если параметр mod содержит модификатор protected
boolean isPublic(int mod): возвращает true, если параметр mod содержит модификатор public
boolean isStatic(int mod): возвращает true, если параметр mod содержит модификатор static
boolean isSynchronized(int mod): возвращает true, если параметр mod содержит модификатор synchronized
boolean isTransient(int mod): возвращает true, если параметр mod содержит модификатор transient
boolean isVolatile(int mod): возвращает true, если параметр mod содержит модификатор volatile
Исследуем модификаторы полей:
import java.lang.reflect.*;
public class Program{
public static void main(String[] args) {
Class cl = Person.class;
// получаем все поля типа Person
Field[] fields = cl.getDeclaredFields();
// выводим информацию о полях
for(Field f : fields){
// получаем модификаторы
int mod = f.getModifiers();
if(Modifier.isPublic(mod)){
System.out.print("public ");
}
else if(Modifier.isProtected(mod)){
System.out.print("protected ");
}
else if(Modifier.isPrivate(mod)){
System.out.print("private ");
}
if(Modifier.isStatic(mod)){
System.out.print("static ");
}
// получаем тип
String type = f.getType().getName();
System.out.print(type + " ");
// получаем имя
String name = f.getName();
System.out.println(name + ";");
}
}
}
class Person {
public String name;
private int id;
private static int count;
Person(String name){
this.name = name;
this.id = ++count;
}
void print(){
System.out.printf("Person. Id: %d Name: %s \n", id, name);
}
}
В данном случае получаем все поля класса Person. Затем в цикле переьираем каждое поле, получаем его модификаторы и смотрим, представляют они public, protected.
private или static:
for(Field f : fields){
// получаем модификаторы
int mod = f.getModifiers();
if(Modifier.isPublic(mod)){
System.out.print("public ");
}
else if(Modifier.isProtected(mod)){
System.out.print("protected ");
}
else if(Modifier.isPrivate(mod)){
System.out.print("private ");
}
if(Modifier.isStatic(mod)){
System.out.print("static ");
}
Затем получаем тип и имя поля и выводим на консоль. В итоге мы получим следующий консольный вывод:
public java.lang.String name; private int id; private static int count;
Для вывода модификаторов можно использовать метод Modifier.toString(). Например:
import java.lang.reflect.*;
public class Program{
public static void main(String[] args) {
Class cl = Person.class;
// получаем все поля типа Person
Field[] fields = cl.getDeclaredFields();
// выводим информацию о полях
for(Field f : fields){
// получаем модификаторы
String modifiers = Modifier.toString(f.getModifiers());
// получаем тип
String type = f.getType().getName();
// получаем имя
String name = f.getName();
System.out.printf("%s %s %s;\n", modifiers, type, name);
}
}
}
class Person {
public String name;
private int id;
private static int count;
Person(String name){
this.name = name;
this.id = ++count;
}
void print(){
System.out.printf("Person. Id: %d Name: %s \n", id, name);
}
}
Для получения модификаторов в виде строки передаем целочисленный код модификаторов в метод Modifier.toString()
String modifiers = Modifier.toString(f.getModifiers());