1. 반영할 메소드 가져오기
반영 메소드를 가져올 때 getMethod와 getDeclaredMethod 두 가지 메소드가 있습니다.
class Class { @CallerSensitive public Method getMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException { Objects.requireNonNull(name); SecurityManager sm = System.getSecurityManager(); if (sm != null) { // 1. 检查方法权限 checkMemberAccess(sm, Member.PUBLIC, Reflection.getCallerClass(), true); } // 2. 获取方法 Method method = getMethod0(name, parameterTypes); if (method == null) { throw new NoSuchMethodException(methodToString(name, parameterTypes)); } // 3. 返回方法的拷贝 return getReflectionFactory().copyMethod(method); } @CallerSensitive public Method getDeclaredMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException { Objects.requireNonNull(name); SecurityManager sm = System.getSecurityManager(); if (sm != null) { // 1. 检查方法是权限 checkMemberAccess(sm, Member.DECLARED, Reflection.getCallerClass(), true); } // 2. 获取方法 Method method = searchMethods(privateGetDeclaredMethods(false), name, parameterTypes); if (method == null) { throw new NoSuchMethodException(methodToString(name, parameterTypes)); } // 3. 返回方法的拷贝 return getReflectionFactory().copyMethod(method); } }
2. Java5에서는 배열과 컬렉션에 대한 반복을 단순화하는 for-each 루프가 제공됩니다. Fore-each 루프를 사용하면 기존 for 루프에서 인덱스를 유지하거나 반복기를 사용하여 컬렉션을 반복할 때 while 루프에서 hasNext 메서드와 next 메서드를 호출하지 않고도 배열을 반복할 수 있습니다.
double[] values = ...; for(double value : values) { // TODO: 处理value } List<Double> valueList = ...; for(Double value : valueList) { // TODO: 处理value }
3. 현재 메소드의 이름을 가져옵니다
<span style= "font-family:Arial;font-size:14px;" >String methodName = Thread.currentThread().getStackTrace()[ 1 ].getMethodName(); </span>
위 내용은 Java에서 반사 방법을 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!