Java 클래스에서 선언된 정적 필드만 검색합니다.
저는 다음과 같은 수업이 있습니다.
public class Test {
public static int a = 0;
public int b = 1;
}
리플렉션을 사용하여 정적 필드 목록만 가져올 수 있습니까?모든 필드의 배열을 취득할 수 있습니다.Test.class.getDeclaredFields()
하지만, 이 모든 것이 제대로 된 것인지Field
instance는 정적 필드를 나타냅니다.
다음과 같이 할 수 있습니다.
Field[] declaredFields = Test.class.getDeclaredFields();
List<Field> staticFields = new ArrayList<Field>();
for (Field field : declaredFields) {
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
staticFields.add(field);
}
}
우연히 이 질문을 발견하고 스트림을 사용한 Java 8 업데이트가 필요하다고 느꼈습니다.
public static List<Field> getStatics(Class<?> clazz) {
List<Field> result;
result = Arrays.stream(clazz.getDeclaredFields())
// filter out the non-static fields
.filter(f -> Modifier.isStatic(f.getModifiers()))
// collect to list
.collect(toList());
return result;
}
분명히, 그 샘플은 읽기 쉽도록 약간 다듬어져 있다.실제로 다음과 같이 쓸 수 있습니다.
public static List<Field> getStatics(Class<?> clazz) {
return Arrays.stream(clazz.getDeclaredFields()).filter(f ->
Modifier.isStatic(f.getModifiers())).collect(toList());
}
[Simple] : [ Modifier ]를 사용하여 필드가 스태틱한지 여부를 확인할 수 있습니다.여기 그런 종류의 작업에 대한 샘플 코드가 있습니다.
public static void printModifiers(Object o) {
Class c = o.getClass();
int m = c.getModifiers();
if (Modifier.isPublic(m))
System.out.println ("public");
if (Modifier.isAbstract(m))
System.out.println ("abstract");
if (Modifier.isFinal(m))
System.out.println ("final");
if(Modifier.isStatic(m))
System.out.println("static");
}
프로젝트에 오픈소스 의존관계를 추가할 수 있는 경우 FieldUtils.readDeclaredStaticField(Test.class,a")도 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/3422390/retrieve-only-static-fields-declared-in-java-class
'programing' 카테고리의 다른 글
MySQL 설명 계획에서 "Select tables optimized away"의 의미 (0) | 2022.10.27 |
---|---|
WebMvcConfigurerAdapter 유형은 사용되지 않습니다. (0) | 2022.10.27 |
jQuery를 사용하여 URL에서 앵커를 가져오려면 어떻게 해야 합니까? (0) | 2022.10.27 |
정의된 모든 변수 보기 (0) | 2022.10.27 |
mappedBy 알 수 없는 대상 엔티티 속성 (0) | 2022.10.26 |