概述
那天在sun的论坛上漂着,不经意发现了一篇帖子,大概意思是想构造一个对象,但又不想或不能调用其构造方法.我把代码整理了一下,如下:
java 代码
- //Test.java
- import java.io.Serializable;
- public class Test implements Serializable {
- private Test() {
- System.out.println("Test");
- }
- public void say()
- {
- System.out.println("Hello!");
- }
- }
java 代码
- //Main.java
- import java.lang.reflect.Constructor;
- import java.security.AccessController;
- import sun.reflect.ReflectionFactory;
- public class Main {
- private static final ReflectionFactory reflectionFactory = (ReflectionFactory) AccessController
- .doPrivileged(new ReflectionFactory.GetReflectionFactoryAction());
- public static void main(String[] args) throws Exception {
- Constructor<test> constr = reflectionFactory </test>
- .newConstructorForSerialization(Test.class, Object.class
- .getConstructor(new Class[0]));
- Test test = (Test) constr.newInstance(new Object[0]);
- test.say();
- }
- }
由于Test类的构造方法是private的,因此在Main类中无法调用其构造方法创建对象.用 ReflectionFactory可以给Test类动态创建一个构造方法,然后调用这个构造方法的newInstance方法创建对象.运行后我们可以发现,屏幕上打印出了"Hello",但并没有打印出 "Test".说明Test的原来的构造方法确实没被调用.
是不是挺有意思的?
然后用eclipse查看了一下 ReflectionFactory类中的方法,发现有许多有意思的方法.如:
newField,newMethod,等等. 但不知道参数具体是什么意思.但在google上,搜了半天,终于还是没有找到sun. reflect这个类库的api,或者相关说明.实在搞不明白,sun搞出来这么个类库,并且和java核心类库放在一起,但没有任何说明,不知道是让谁用的.
最后
以上就是生动石头为你收集整理的用ReflectionFactory实现不调用构造参数创建对象的全部内容,希望文章能够帮你解决用ReflectionFactory实现不调用构造参数创建对象所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复