반사를 통해 객체 작성
1. Class 바이트 객체 newInstance()를 통과합니다.(기본적으로 참조 없음으로 생성됨)
2. 구조기 getConstructor(Class>.parameterTypes)를 가져옵니다.(참고가 있는 구조기를 통해 파라미터는 구체적인 유형과 여러 개의 수량을 지정할 수 있다)
코드:
사용자 클래스 User가 있다고 가정합니다.
package test.java.zxj.test_project;
public class User {
private String userId;
private String name;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
이때 사용자 정의 구조 파라미터가 없고 기본적인 무참구조만 있습니다.
반사를 통해 객체를 직접 작성할 수 있습니다.
package test.java.zxj.test_project;
public class TestReflection {
public static void main(String[] args) throws Exception {
Class> clz = Class.forName("test.java.zxj.test_project.User");
Object object = clz.newInstance();
System.out.println(object instanceof User);
}
}
인쇄 결과는true입니다.
이런 clz.새 Instance () 방식으로 기본 무참구조의 대상만 만들 수 있습니다.
구조가 있는 대상은 어떻게 만듭니까?
아니면 이 User, 우리가 파라미터를 가진 구조를 더하기;
package test.java.zxj.test_project;
public class User {
private String userId;
private String name;
public User() {
}
public User(String userId, String name) {
super();
this.userId = userId;
this.name = name;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
이때 우리는 구조기를 가져와서 대상을 만들어야 한다.
package test.java.zxj.test_project;
import java.lang.reflect.Constructor;
public class TestReflection {
public static void main(String[] args) throws Exception {
Class> clz = Class.forName("test.java.zxj.test_project.User");
//
Constructor> constructor = clz.getConstructor(String.class, String.class);
Object object = constructor.newInstance("userId_001","name_jack");
// System.out.println(object instanceof User);
if (object instanceof User) {
User user = (User)object;
System.out.println("userId:" + user.getUserId());
System.out.println("name:" + user.getName());
}
}
}
결과 인쇄 가능
userId:userId_001
name:name_jack
주의: 여기에서 구조기를 얻는 것은 공공의 것만 얻을 수 있으며, 개인적인 필요에 대한 폭력적인 반사만 얻을 수 있습니다
constructor.setAccessible(true);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React-router(8) Link 태그 to 속성이 객체인 경우(라우팅 정보 전송)8. Link 태그 to 속성이 객체인 경우(라우팅 정보 전송) DEMO 주소 참조 6.routeInfo.js 구성 요소 안에서, 모든 구성 요소의 루트 데이터는 각자 독립된 것이다. 이전 분석에서는 다음을 알고 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.