사전 컴파일된 클래스를 가져오고 클래스 경로의 일부인 시나리오에서는 런타임 시 주석 문자열 매개변수를 수정하는 것이 바람직할 수 있습니다. 이 문서에서는 이를 달성하기 위한 가능한 접근 방식을 살펴봅니다.
특정 주석의 특정 키에 대한 주석 값을 변경하려면 다음 단계를 따르세요.
다음을 사용하여 주석에 대한 호출 핸들러를 검색합니다. Proxy.getInvocationHandler(annotation):
Object handler = Proxy.getInvocationHandler(annotation);
선언된 필드에 액세스하고 접근성을 true로 설정하여 처리기에서 memberValues 필드를 가져옵니다.
Field f = handler.getClass().getDeclaredField("memberValues"); f.setAccessible(true);
memberValues를 다음과 같이 검색합니다. 지도:
Map<String, Object> memberValues = (Map<String, Object>) f.get(handler);
키를 사용하여 지도에서 이전 값을 검색합니다.
Object oldValue = memberValues.get(key);
새 값으로 지도 업데이트 :
memberValues.put(key, newValue);
다음 주석이 달린 클래스를 고려하세요.
@ClassAnnotation("class test") public static class TestClass { @FieldAnnotation("field test") public Object field; @MethodAnnotation("method test") public void method() {} }
런타임에 주석 값을 수정하려면 다음 코드를 사용하세요.
Field field = TestClass.class.getField("field"); final FieldAnnotation fieldAnnotation = field.getAnnotation(FieldAnnotation.class); System.out.println("old FieldAnnotation = " + fieldAnnotation.value()); changeAnnotationValue(fieldAnnotation, "value", "another field annotation value"); System.out.println("modified FieldAnnotation = " + fieldAnnotation.value());
이 접근 방식을 사용하면 동적으로 다음을 수행할 수 있습니다. 새 주석 인스턴스를 생성하지 않고 주석 매개변수를 수정하여 구체적인 주석 클래스에 대한 사전 지식의 필요성을 줄입니다.
위 내용은 런타임에 클래스 정의의 주석 문자열 매개변수를 어떻게 수정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!