반응형
Java 클래스에서 선언 된 정적 필드 만 검색
다음 수업이 있습니다.
public class Test {
public static int a = 0;
public int b = 1;
}
정적 필드의 목록 만 가져 오기 위해 리플렉션을 사용할 수 있습니까? 와 함께 모든 필드의 배열을 얻을 수 있다는 것을 알고 있습니다 Test.class.getDeclaredFields(). 그러나 Field인스턴스가 정적 필드를 나타내는 지 여부를 결정할 수있는 방법이없는 것 같습니다 .
다음과 같이 할 수 있습니다 :
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());
}
프로젝트에 오픈 소스 종속성을 추가 할 수있는 경우 FieldUtils.readDeclaredStaticField (Test.class, "a") 를 사용할 수도 있습니다.
간단합니다. 수정자를 사용하여 필드가 정적인지 여부를 확인할 수 있습니다. 이러한 종류의 작업에 대한 샘플 코드는 다음과 같습니다.
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");
}
참고 URL : https://stackoverflow.com/questions/3422390/retrieve-only-static-fields-declared-in-java-class
반응형
'IT' 카테고리의 다른 글
| 팬더의 특정 열 인덱스에 열을 어떻게 삽입합니까? (0) | 2020.06.11 |
|---|---|
| 왜 int i = 1024 * 1024 * 1024 * 1024가 오류없이 컴파일됩니까? (0) | 2020.06.11 |
| 사용 가능한 플레이 북에서 하나의 작업 만 실행하는 방법은 무엇입니까? (0) | 2020.06.11 |
| 멤버를 수동으로 폐기하는 방법 (0) | 2020.06.11 |
| PyCrypto AES 256을 사용한 암호화 및 복호화 (0) | 2020.06.11 |