[代码] [Java]代码
001 |
/** |
002 |
*
@Title: 反射方式调用构造方法 |
003 |
*
@return void |
004 |
*/ |
005 |
public void invokeConstructor() throws Exception
{ |
006 |
007 |
String
className = "XXXXX" ; |
008 |
//
创建一个Class对象,用于描述Person类 |
009 |
Class<?>
clazz = Class.forName(className); |
010 |
011 |
/** |
012 |
*
调用有参的构造方法 |
013 |
*/ |
014 |
//
指明所要调用的构造方法的形参 |
015 |
Class<?>[]
argTypes = { String. class ,
Integer. class }; |
016 |
//
获取指定参数的构造方法 |
017 |
Constructor<?>
constructor = clazz.getConstructor(argTypes); |
018 |
//
通过给定的实参,创建一个对象,它的返回值即新建对象的句柄 |
019 |
Object
obj = constructor.newInstance( "ddd" , 333 ); |
020 |
021 |
/** |
022 |
*
调用无参构造方法 |
023 |
* |
024 |
*
@see 也可以使用下面的两种方式,获取无参的构造方法 |
025 |
*
@see constructor = clazz.getConstructor(new Class[0]) |
026 |
*
@see constructor = clazz.getConstructor(null) |
027 |
*
@see 另外也可以使用obj = clazz.newInstance()创建无参构造方法的一个对象 |
028 |
*/ |
029 |
//
获取无参的构造方法,并使用其创建一个对象 |
030 |
obj
= clazz.getConstructor().newInstance(); |
031 |
032 |
} |
033 |
034 |
/** |
035 |
* |
036 |
*
@Title: 反射方式调用单例 |
037 |
*
@param @throws Exception |
038 |
*
@return void |
039 |
*
@throws |
040 |
*/ |
041 |
public void invokeSingleton() throws Exception
{ |
042 |
043 |
String
className = "XXXXX" ; |
044 |
//
反射调用单例(无参) |
045 |
Class
c = Class.forName(className); |
046 |
047 |
Method
m = c.getDeclaredMethod( "getInstance" ); |
048 |
049 |
//
若调用private方法,设置此属性,即可访问 |
050 |
//
m1.setAccessible(true); |
051 |
052 |
Object
obj = m.invoke(c); |
053 |
054 |
//
反射调用单例(有参) |
055 |
Class
c1 = Class.forName(className); |
056 |
057 |
//
Class<?>[] cc = {String.class}; |
058 |
//
Method m =c.getDeclaredMethod("getInstance",cc); |
059 |
Method
m1 = c1.getDeclaredMethod( "getInstance" ,
String. class ); |
060 |
061 |
//
若调用private方法,设置此属性,即可访问 |
062 |
//
m1.setAccessible(true); |
063 |
064 |
Object
obj1 = m1.invoke(c, "我是参数字符串" ); |
065 |
066 |
} |
067 |
068 |
/** |
069 |
* |
070 |
*
@Title: 得到某个对象的属性 |
071 |
*
@param owner |
072 |
*
@param fieldName |
073 |
*
@return Object |
074 |
*
@throws |
075 |
*/ |
076 |
public Object
getProperty(Object owner, String fieldName) throws Exception
{ |
077 |
078 |
Class
ownerClass = owner.getClass(); |
079 |
080 |
Field
field = ownerClass.getField(fieldName); |
081 |
082 |
Object
property = field.get(owner); |
083 |
084 |
return property; |
085 |
} |
086 |
087 |
/** |
088 |
* |
089 |
*
@Title: 得到某个类的静态属性 |
090 |
*
@param className |
091 |
*
@param fieldName |
092 |
*
@return Object |
093 |
*
@throws |
094 |
*/ |
095 |
public Object
getStaticProperty(String className, String fieldName) |
096 |
throws Exception
{ |
097 |
098 |
Class
ownerClass = Class.forName(className); |
099 |
100 |
Field
field = ownerClass.getField(fieldName); |
101 |
102 |
Object
property = field.get(ownerClass); |
103 |
104 |
return property; |
105 |
} |
106 |
107 |
/** |
108 |
* |
109 |
*
@Title: 执行某对象的方法 |
110 |
*
@param owner |
111 |
*
@param methodName |
112 |
*
@param args |
113 |
*
@return Object |
114 |
*/ |
115 |
public Object
invokeMethod(Object owner, String methodName, Object[] args) |
116 |
throws Exception
{ |
117 |
118 |
Class
ownerClass = owner.getClass(); |
119 |
//
参数类型 |
120 |
Class[]
argsClass = new Class[args.length]; |
121 |
for ( int i
= 0 ,
j = args.length; i < j; i++) { |
122 |
argsClass[i]
= args[i].getClass(); |
123 |
} |
124 |
Method
method = ownerClass.getMethod(methodName, argsClass); |
125 |
return method.invoke(owner,
args); |
126 |
} |
127 |
128 |
/** |
129 |
* |
130 |
*
@Title: 执行某个类的静态方法 |
131 |
*
@param className |
132 |
*
@param methodName |
133 |
*
@param args |
134 |
*
@return Object |
135 |
*
@throws |
136 |
*/ |
137 |
public Object
invokeStaticMethod(String className, String methodName, |
138 |
Object[]
args) throws Exception
{ |
139 |
140 |
Class
ownerClass = Class.forName(className); |
141 |
142 |
Class[]
argsClass = new Class[args.length]; |
143 |
144 |
for ( int i
= 0 ,
j = args.length; i < j; i++) { |
145 |
argsClass[i]
= args[i].getClass(); |
146 |
} |
147 |
148 |
Method
method = ownerClass.getMethod(methodName, argsClass); |
149 |
150 |
return method.invoke( null ,
args); |
151 |
} |