리플렉션을 통해 Java 클래스의 퍼블릭 스태틱 최종 필드/속성 값을 가져옵니다.
수업이 있다고 가정합니다.
public class R {
public static final int _1st = 0x334455;
}
반영을 통해 "_1st" 값을 얻으려면 어떻게 해야 합니까?
먼저 클래스의 필드 속성을 가져온 다음 값을 가져올 수 있습니다.유형을 알고 있는 경우 get 메서드 중 하나를 null과 함께 사용할 수 있습니다(스태틱필드의 경우에만 실제로 get 메서드에 전달된 인수는 완전히 무시됩니다).그렇지 않으면 getType을 사용하여 다음과 같이 적절한 스위치를 쓸 수 있습니다.
Field f = R.class.getField("_1st");
Class<?> t = f.getType();
if(t == int.class){
System.out.println(f.getInt(null));
}else if(t == double.class){
System.out.println(f.getDouble(null));
}...
R.class.getField("_1st").get(null);
예외 처리는 독자의 연습으로 남습니다.
기본적으로 리플렉션을 통해 다른 필드와 마찬가지로 필드를 얻지만 get 메서드를 호출하면 실행할 인스턴스가 없기 때문에 null로 전달됩니다.
이것은 최종 필드에 관계없이 모든 정적 필드에 적용됩니다.필드가 공개되지 않은 경우setAccessible(true)
물론 Security Manager가 이 모든 것을 허용해야 합니다.
같은 경로(생성된 R클래스를 훑어보기)를 따라가다 보니 Resources 클래스의 함수라는 느낌이 들었습니다.내가 옳았음.
검색 결과:리소스:: getIdentifier
사람들이 시간을 절약할 수 있을 것 같아서요비록 의사들 사이에서는 그렇게 말하지 않았지만, 별로 놀랍지도 않아요.
사설 정전기장을 얻는 방법을 찾다가 이곳에 도착했어요.
동료 검색자를 위한 방법은 다음과 같습니다.
public class R {
private static final int _1st = 0x334455;
}
class ReflectionHacking {
public static main(String[] args) {
Field field = R.class.getFieldDeclaration("_1st");
field.setAccessible(true);
int privateHidenInt = (Integer)field.get(null);
}
}
언급URL : https://stackoverflow.com/questions/2685345/getting-value-of-public-static-final-field-property-of-a-class-in-java-via-refle
'programing' 카테고리의 다른 글
MySQL에서 생성된 컬럼 정의를 찾는 방법 (0) | 2022.10.12 |
---|---|
vue 및 모멘트를 사용하여 Jasmine의 버튼 메서드에 인수를 전달할 수 없습니다. (0) | 2022.10.12 |
사용자 지정 정렬 순서를 사용하여 개체의 ArrayList 정렬 (0) | 2022.10.12 |
뷰 제한으로 정렬한 다음 다른 열로 정렬 (0) | 2022.10.12 |
java.displaces를 클릭합니다.Illogal Access Error: 클래스 lombok.javac.apt를 클릭합니다.Lombok Processor는 com.sun.tools.javac.processing 클래스에 액세스할 수 없습니다.Javac Processing Environment(Javac 처리 환경) (0) | 2022.10.12 |