자바 : 클래스의 모든 변수 이름 가져 오기
클래스가 있고 모든 공용 필드 (메서드가 아님) 를 찾고 싶습니다 . 어떻게 할 수 있습니까?
감사!
Field[] fields = YourClassName.class.getFields();
클래스의 모든 공용 변수 배열을 반환합니다.
getFields()전체 계급 상속권의 필드를 반환합니다. 필드를 해당 클래스에서만 정의하고 수퍼 클래스는 정의하지 않으려면을 사용 하고 다음 접근 방식으로 필드를 getDeclaredFields()필터링하십시오 .publicModifier
Modifier.isPublic(field.getModifiers());
YourClassName.class문자 실제로 형식의 개체를 나타냅니다 java.lang.Class. 더 흥미로운 반사 방법에 대한 문서를 확인하십시오.
Field위 의 클래스는 java.lang.reflect.Field입니다. 전체 java.lang.reflect패키지를 살펴볼 수 있습니다 .
https://docs.oracle.com/javase/tutorial/reflect/class/classMembers.html 에는 메서드 및 생성자를 찾는 차트도 있습니다.
필요에 따라 두 가지 중 하나를 사용할 수 있습니다.
Field[] fields = ClassName.class.getFields(); // returns inherited members but not private members.
Field[] fields = ClassName.class.getDeclaredFields(); // returns all members including private members but not inherited members.
요구 사항에 따라 위 목록의 공용 필드 만 필터링하려면 아래 코드를 사용하십시오.
List<Field> fieldList = Arrays.asList(fields).stream().filter(field -> Modifier.isPublic(field.getModifiers())).collect(
Collectors.toList());
소수의 사용자가 언급했듯이 아래 코드는 주어진 클래스의 모든 필드를 찾는 데 도움이 될 수 있습니다.
TestClass testObject= new TestClass().getClass();
Method[] methods = testObject.getMethods();
for (Method method:methods)
{
String name=method.getName();
if(name.startsWith("get"))
{
System.out.println(name.substring(3));
}else if(name.startsWith("is"))
{
System.out.println(name.substring(2));
}
}
그러나 더 흥미로운 접근 방식은 다음과 같습니다.
Jackson 라이브러리의 도움으로 String / integer / double 유형의 모든 클래스 속성과 Map 클래스의 각 값을 찾을 수있었습니다. ( 반사 API를 사용하지 않고! )
TestClass testObject = new TestClass();
com.fasterxml.jackson.databind.ObjectMapper m = new com.fasterxml.jackson.databind.ObjectMapper();
Map<String,Object> props = m.convertValue(testObject, Map.class);
for(Map.Entry<String, Object> entry : props.entrySet()){
if(entry.getValue() instanceof String || entry.getValue() instanceof Integer || entry.getValue() instanceof Double){
System.out.println(entry.getKey() + "-->" + entry.getValue());
}
}
참고 URL : https://stackoverflow.com/questions/2126714/java-get-all-variable-names-in-a-class
'code' 카테고리의 다른 글
| Python을 다른 폴더에서 가져올 수 없습니다. (0) | 2020.09.24 |
|---|---|
| 성능 및 Java 상호 운용성 : Clojure 대 Scala (0) | 2020.09.24 |
| "선택기 배열"을 만드는 방법 (0) | 2020.09.24 |
| git 저장소에서 bin 및 obj 폴더를 어떻게 무시할 수 있습니까? (0) | 2020.09.24 |
| call 또는 apply를 사용하여 자바 스크립트 생성자를 어떻게 호출 할 수 있습니까? (0) | 2020.09.24 |
