반사를 통해 객체 작성
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 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
반사를 통해 객체 작성반사를 통해 객체를 작성하는 두 가지 방법 1. Class 바이트 객체 newInstance()를 통과합니다.(기본적으로 참조 없음으로 생성됨) 2. 구조기 getConstructor(Class>.parameterT...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.