참조 구조의 실례화된 대상을 호출하다
만약 무참 구조 방법이 없다면 반드시 실례화 대상 조작을 할 수 없습니까?답안은 정해진 것이 아니라 조작할 때 클래스의 구조 방법을 명확하게 호출하면 파라미터를 전달하는 것도 실례화 조작을 할 수 있다.다음 단계를 수행합니다.
1.Class클래스의 getConstructors()를 통해 본 클래스의 모든 구조 방법을 얻기;
2. 구조 방법에 하나의 대상 수조를 전달하여 진행하는데 그 안에 구조 방법에 필요한 각 파라미터를 포함한다.
3. 이후 Constructor를 통해 객체 인스턴스화
import java.lang.reflect.Constructor;
class Person
{
private String name;
private int age;
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{
return this.name;
}
public void setName(String name)
{
this.name=name;
}
public int getAge()
{
return this.age;
}
public void setAge(int age)
{
this.age=age;
}
public String toString()
{
return " :"+this.name+";"+" :"+this.age;
}
}
public class ClassInstance {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stubC
Class<?> class1=null;
try {
class1=Class.forName("com.yuchao.reflect.Person");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
Person person=null;
Constructor<?> constructons[]=null;
constructons=class1.getConstructors();
try {
//person=(Person)class1.newInstance();
person=(Person)constructons[0].newInstance("yuchao",25);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println(person);
}
}
프로그램 실행 결과:
이름:yuchao;나이
상기 코드는 대상의 실례화 과정을 완성했지만 코드가 비교적 복잡하기 때문에 실제 개발에서 무참한 구조 함수를 최대한 보존해야 한다.
반사적 응용 - 획득류의 구조
java.lang.reflect 패키지에는 다음과 같은 몇 가지 종류가 있습니다:Constructor,Field,Method
다음 클래스와 Class 클래스를 통해 클래스의 반사 작업을 함께 수행할 수 있습니다.
실현된 모든 인터페이스를 얻다
interface China
{
public static final String NATIONAL_STRING="China";
public static final String AUTHOR_STRING="yuchao";
public void sayChina();
public String sayHello(String name,int age);
}
class Person implements China
{
private String name;
private int age;
public Person()
{
}
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{
return this.name;
}
public void setName(String name)
{
this.name=name;
}
public int getAge()
{
return this.age;
}
public void setAge(int age)
{
this.age=age;
}
public String toString()
{
return " :"+this.name+";"+" :"+this.age;
}
@Override
public void sayChina() {
// TODO Auto-generated method stub
System.out.println(" :"+AUTHOR_STRING+", :"+NATIONAL_STRING);
}
@Override
public String sayHello(String name, int age) {
// TODO Auto-generated method stub
return name+", ! "+age+" !";
}
}
public class ClassInstance {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stubC
Class<?> class1=null;
try {
class1=Class.forName("com.yuchao.reflect.Person");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
Class<?> class2[]=class1.getInterfaces();
for(int i=0;i<class2.length;i++)
{
System.out.println(" :"+class2[i].getName());
}
}
}
부류를 얻으려면class1.getInterfaces () 를 class1로 변경합니다.getSuperClass()、class.getConstructors()、class1.getConstructors()[0].getModifiers()