Java 반사 메커니즘
Java 반사 메커니즘은 모든 클래스의 경우,이 동적으로 얻은 모든 방법을 알 수 있습니다 이 방법을 Java 언어의 반사 메커니즘이라고합니다.
Java 반사 메커니즘은 주로 다음 기능을 제공합니다 물체;
1. 객체의 속성을 얻으십시오
코드 사본은 다음과 같습니다.
공개 객체 getProperty (개체 소유자, 문자열 필드 이름)는 예외 {
클래스 ownsclass = 소유자.getClass ();
필드 필드 = olderclass.getfield (FieldName);
개체 속성 = field.get (소유자);
반품 속성;
}
클래스 소유자 class = onder.getClass () :이 객체의 클래스를 가져옵니다.
Field Field = olderclass.getfield (FieldName) : 클래스를 통해 클래스가 선언 한 속성을 가져옵니다.
Object Property = Field.get (소유자) :이 속성을 통해이 속성의 인스턴스를 얻으십시오.
2. 특정 클래스의 정적 속성을 얻으십시오
코드 사본은 다음과 같습니다.
public Object getStaticProperty (String ClassName, String FieldName)
예외 {{
클래스 소유자 class = class.forname (className);
필드 필드 = olderclass.getfield (FieldName);
객체 속성 = field.get (소유자 클래스);
반품 속성;
}
클래스 소유자 class = class.forname (className) : 먼저이 클래스의 클래스를 얻습니다.
Field Field = olderclass.getfield (FieldName) : 위와 마찬가지로 클래스를 통해 클래스별로 선언 한 속성을 가져옵니다.
Object Property = Field.get (olderclass) : 속성이 정적이기 때문에 위와 약간 다르므로 클래스 클래스에서 직접 가져옵니다.
3. 객체를 실행하는 방법
코드 사본은 다음과 같습니다.
public object invokemethod (객체 소유자, 문자열 메소드 이름, 개체 [] args)는 예외 {
클래스 ownsclass = 소유자.getClass ();
클래스 [] argsclass = new Class [args.length];
for (int i = 0, j = args.length; i <j; i ++) {
argsclass [i] = args [i] .getClass ();
}
메소드 메소드 = olderclass.getMethod (MethodName, ArgsClass);
return method.invoke (소유자, args);
}
클래스 소유자 _class = 소유자.getClass () : 우선,이 개체의 클래스를 가져와야합니다.
5 ~ 9 행 : 메소드를 찾기위한 조건으로 클래스 매개 변수 배열을 구성합니다.
메소드 메소드 = olderclass.getMethod (MethodName, ArgsClass) : MethodName 및 ArgsClass (메서드에서 설정된 매개 변수 유형) 배열에 의해 실행될 메소드를 가져옵니다.
method.invoke (older, args) : method.invoke 메소드는이 메소드를 실행하는 객체 소유자이며, 매개 변수 배열은 다음과 같이 이해할 수 있습니다. . 리턴 값은 오브젝트이며 메소드의 리턴 값이기도합니다.
4. 특정 클래스의 정적 메소드를 실행하십시오
코드 사본은 다음과 같습니다.
public Object InvokestaticMethod (String classname, String MethodName,
Object [] args) 예외 {
클래스 소유자 class = class.forname (className);
클래스 [] argsclass = new Class [args.length];
for (int i = 0, j = args.length; i <j; i ++) {
argsclass [i] = args [i] .getClass ();
}
메소드 메소드 = olderclass.getMethod (MethodName, ArgsClass);
return method.invoke (null, args);
}
기본 원칙은 예 3과 동일하며, 차이는 마지막 줄은 정적 메소드이며 인스턴스의 도움이 필요하지 않기 때문입니다.
5. 새 인스턴스를 만듭니다
코드 사본은 다음과 같습니다.
public Object NewInstance (String ClassName, Object [] args)는 예외 {
클래스 newoneClass = class.forname (className);
클래스 [] argsclass = new Class [args.length];
for (int i = 0, j = args.length; i <j; i ++) {
argsclass [i] = args [i] .getClass ();
}
생성자 cons = newoneClass.getConstructor (ArgsClass);
반환 cons.newinstance (Args);
}
여기에 언급 된 방법은 매개 변수가있는 생성자를 실행하여 새 인스턴스를 생성하는 것입니다. 매개 변수가 필요하지 않은 경우 NewOneClass.newInstance ()를 직접 사용하여 구현할 수 있습니다.
클래스 newoneClass = class.forname (className) : 첫 번째 단계는 인스턴스 클래스를 구성하는 것입니다.
5 ~ 9 행 : 매개 변수의 클래스 배열을 가져옵니다.
생성자 cons = newoneClass.getConstructor (ArgsClass) : 생성자를 얻습니다.
cons.newinstance (Args) : 새 인스턴스를 만듭니다.
6. 특정 클래스의 인스턴스인지 결정
코드 사본은 다음과 같습니다.
Public Boolean isinstance (Object OBJ, 클래스 CLS) {
반환 cls.isinstance (obj);
}
7. 배열에서 요소를 얻으십시오
코드 사본은 다음과 같습니다.
공개 객체 GetByArray (객체 배열, int index) {
반환 배열 (배열, 색인);
}