JAVA反射技术(二)
2008-01-05 09:06:30 来源:WEB开发网核心提示:Lesson:2 处理对象1.Creating Objects 一般情况下,创建一个对象用以下方法Rectangle r = new Rectangle();但假如你正在开发一个development tools,JAVA反射技术(二),在运行之前或许不知道要生成对象的类,所以要像下面这样来创建对象:String cl
Lesson:2 处理对象
1.Creating Objects
一般情况下,创建一个对象用以下方法
Rectangle r = new Rectangle();
但假如你正在开发一个development tools,在运行之前或许不知道要生成对象的类。
所以要像下面这样来创建对象:
String className;
// . . . load className from the user interface
Object o = new (className); // WRONG!
但以上是错误的。
正确的方法是使用类的反射特性:
1)Using No-Argument ConstrUCtors
例如:
Class classDefinition = Class.forName(className);//指定类的运行期实例
object = classDefinition.newInstance();//调用无参构造函数来生成指定类的实例。
2)Using Constructors that Have Arguments
这个技术要用到如下步骤:
a,创建一个Class对象
b,创建一个Constructor对象,getConstructor(Class[] params)方法,参数是一个与构造方法相适合的Class 数组.
c,在Constructor对象上调用newInstance方法来生成一个对象,参数 是一个object数组与这个构造方法相配备。
例如:
import java.lang.reflect.*;
import java.awt.*;
class SampleInstance {
public static void main(String[] args) {
Rectangle rectangle;
Class rectangleDefinition;
Class[] intArgsClass = new Class[] {int.class, int.class};
Integer height = new Integer(12);
Integer width = new Integer(34);
Object[] intArgs = new Object[] {height, width};
Constructor intArgsConstructor;
try {
//1.
rectangleDefinition = Class.forName("java.awt.Rectangle");
//2.
intArgsConstructor =
rectangleDefinition.getConstructor(intArgsClass);//找到指定的构造方法
//3.
rectangle =
(Rectangle) createObject(intArgsConstructor, intArgs);//构造方法描述对象,object[]
} catch (ClassNotFoundException e) {
System.out.PRintln(e);
} catch (NoSuchMethodException e) {
System.out.println(e);
}
}
public static Object createObject(Constructor constructor,
Object[] arguments) {
System.out.println ("Constructor: " + constructor.toString());
Object object = null;
try {
object = constructor.newInstance(arguments);
System.out.println ("Object: " + object.toString());
return object;
} catch (InstantiationException e) {
System.out.println(e);
} catch (IllegalaccessException e) {
System.out.println(e);
} catch (IllegalArgumentException e) {
System.out.println(e);
[]
赞助商链接