JAVA 반사 메커니즘 인스턴스 상세 정보

본고는 JAVA 반사 메커니즘을 실례적으로 분석하였다.다음과 같이 여러분에게 참고할 수 있도록 공유합니다.
반사, 당시에 그들의 말을 자주 들었는데 자신도 일부 자료를 보았고 디자인 모델에서 사용한 적이 있을 수도 있지만 그것에 대해 깊은 이해가 없는 것 같아서 이번에 다시 공부했는데 괜찮은 것 같아요!
1. 반사의 개념을 살펴보자.
주로 프로그램이 그 자체의 상태나 행위를 방문하고 검측하고 수정할 수 있는 능력을 가리키며 자신의 행위의 상태와 결과에 따라 응용 프로그램이 기술한 행위의 상태와 관련 의미를 조정하거나 수정할 수 있다.
반사는 자바의 강력한 도구로 우리가 유연한 코드를 쉽게 만들 수 있습니다. 이 코드들은 다시 실행할 때 조립할 수 있고 구성 요소 간에 원본 코드 링크를 할 필요가 없습니다.하지만 반사 사용이 부적절하면 비용이 높아요!
개념이 어지러워서 계속 내려다보세요.
2. 반사 메커니즘의 역할:
1. 역번역:.class-->.java
2. 반사 메커니즘을 통해 자바 대상의 속성, 방법, 구조 방법 등에 접근한다.
이렇게 하면 좀 더 이해하기 쉬울 것 같다. 아래에서 우리는 어떻게 이런 기능을 실현하는지 구체적으로 보자.
3. 여기서 먼저 Sun이 우리에게 반사 메커니즘의 종류를 제공했다.

java.lang.Class;
java.lang.reflect.Constructor; java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;

많은 반사 중의 방법, 속성 등 조작을 우리는 이 네 가지 종류에서 조회할 수 있다.아니면 끊임없는 검색 API를 배워야 할지 그게 우리 최고의 선생님입니다.
4. 구체적인 기능 실현:
1. 반사 메커니즘 획득 클래스는 세 가지 방법이 있는데, 우리는Employee 유형을 얻는다

// : 
Classc1 = Class.forName("Employee"); 
// : 
//java class  . 
Classc2 = Employee.class; 
// : 
//java java getClass   
Employeee = new Employee(); 
Classc3 = e.getClass(); //c3  (e Employee)
2. 객체 만들기: 클래스를 가져오면 newInstance를 사용하여 객체를 만듭니다.

Class c =Class.forName("Employee");
// Class  
Objecto = c.newInstance(); // Employee .

3. 속성 획득: 모든 속성과 지정된 속성으로 나뉩니다.
①, 모든 속성을 얻기 위한 쓰기 방법:

// 
Class c = Class.forName("java.lang.Integer");
// ?
Field[] fs = c.getDeclaredFields();
// , 
StringBuffer sb = new StringBuffer();
// , 
// public 
sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{
"); // for(Field field:fs){ sb.append("\t");// sb.append(Modifier.toString(field.getModifiers())+" ");// , public,static sb.append(field.getType().getSimpleName() + " ");// sb.append(field.getName()+";
");// + } sb.append("}"); System.out.println(sb);
② 특정 속성을 획득하여 전통적인 방법과 비교하여 학습한다.

public static void main(String[] args) throws Exception{ 
<span style="white-space:pre"> </span>// : 
  /* 
  User u = new User(); 
  u.age = 12; //set 
  System.out.println(u.age); //get 
  */ 
  //  
  Class c = Class.forName("User"); 
  // id  
  Field idF = c.getDeclaredField("id"); 
  // o 
  Object o = c.newInstance(); 
  //  
  idF.setAccessible(true); // , java 。 
  // o id "110" 
  idF.set(o, "110"); //set 
  //get 
  System.out.println(idF.get(o)); 
} 

4. 획득 방법과 구조 방법은 더 이상 상세하게 설명하지 않고 키워드만 보십시오.
방법 키워드
함의
getDeclaredMethods()
모든 방법 가져오기
getReturnType()
획득 방법의 반환 유형
getParameterTypes()
획득 방법의 전송 매개 변수 형식
getDeclaredMethod(메서드 이름, 매개변수 유형.class,...)
특정한 방법을 얻다
 
 
구조 방법 키워드
함의
getDeclaredConstructors()
모든 구조 방법 가져오기
getDeclaredConstructor(매개변수 유형.class,...)
특정 구조 방법 가져오기
 
 
상위 클래스 및 상위 인터페이스
함의
getSuperclass()
클래스의 상위 클래스 가져오기
getInterfaces()
어떤 종류의 실현된 인터페이스를 가져오다
  
이렇게 하면 우리는 유형의 각종 내용을 얻을 수 있고 반번역을 진행할 수 있다.JAVA와 같은 먼저 컴파일하고 실행하는 언어에 있어서 반사 메커니즘은 코드를 더욱 유연하게 하고 대상을 대상으로 하는 것을 더욱 쉽게 실현할 수 있다.
다섯째, 반사와 프로필을 추가하여 프로그램을 더욱 유연하게 합니다.
디자인 모델 학습에서 추상적인 공장을 배울 때 반사로 데이터베이스 링크 문자열을 더욱 편리하게 읽는 등 당시에는 그다지 이해하지 못하고 그대로 베꼈다.봐봐.NET의 반사 + 구성 파일 사용:
당시 사용한 프로필은 app입니다.config 파일, 내용은 XML 형식이고 안에 링크된 데이터베이스의 내용을 기입합니다.

<configuration>
<appSettings>
<add key="" value=""/>
</appSettings>
</configuration>

반사된 쓰기 방법:
assembly.load (현재 프로그램 집합의 이름).CreateInstance(현재 이름공간 이름. 실례화할 클래스 이름); 
이러한 장점은 우리가 데이터베이스를 쉽게 바꾸는 데 편리하다는 것이다. 예를 들어 우리가 시스템의 데이터베이스를 SQL Server에서 Oracle로 업그레이드하면 우리는 D층을 두 부 쓰고 프로필의 내용을 바꾸거나 조건을 붙여 선택하면 매우 큰 편리를 가져올 수 있다.
물론 JAVA에서도 마찬가지입니다. 단지 이곳의 프로필은.properties, 속성 파일이라고 합니다.반사를 통해 안의 내용을 읽다.이렇게 코드는 고정되어 있지만, 프로필의 내용을 우리는 고칠 수 있으며, 이렇게 하면 우리의 코드를 매우 유연하게 할 수 있다.
요약하면 JAVA의 반사적인 재학습은 이를 유연하게 활용하면 우리의 코드를 더욱 유연하게 할 수 있지만 그 단점도 있다. 바로 이를 활용하면 우리의 소프트웨어의 성능을 떨어뜨리고 복잡도를 증가시킬 수 있기 때문에 신중하게 사용해야 한다는 것이다.
본 논문이 여러분의 Java 프로그램 설계에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기