반응형
    
    
    
  클래스의 모든 변수 이름 가져오기
클래스가 있는데 메서드가 아닌 모든 공개 필드를 찾고 싶습니다.이거 어떻게 해?
Field[] fields = YourClassName.class.getFields();
클래스의 모든 공용 변수 배열을 반환합니다.
getFields()전 학급의 논밭을 되돌리다슈퍼클래스가 아닌 해당 클래스에서만 필드를 정의하려면getDeclaredFields()및 필터 처리public다음과 같은 것을 가진 것Modifier접근법:
Modifier.isPublic(field.getModifiers());
그YourClassName.class리터럴은 실제로 유형의 개체를 나타냅니다.더 흥미로운 반사 방법에 대해서는 문서를 참조하십시오.
그Field위의 클래스는. 패키지 전체를 볼 수 있습니다.
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 클래스의 각 값을 찾을 수 있었습니다.(reflections 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/get-all-variable-names-in-a-class
반응형
    
    
    
  'programing' 카테고리의 다른 글
| 매니페스트 사용Java의 MF 파일 (0) | 2022.09.04 | 
|---|---|
| Java 8 비교기 유형 추론에 매우 혼란스럽다. (0) | 2022.09.04 | 
| Java 불변의 컬렉션 (0) | 2022.09.04 | 
| 불투명 C 구조체: 다양한 선언 방법 (0) | 2022.09.04 | 
| 아티팩트 org.apache.maven을 전송할 수 없습니다.플러그인: maven-surefire-pair: pattern: 2.7.1에서 central(http://repo1.maven.org/maven2)로) (0) | 2022.09.04 | 
