那天在sun的论坛上漂着,不经意发现了一篇帖子,大概意思是想构造一个对象,但又不想或不能调用其构造方法.我把代码整理了一下,如下:

 

 

//Test.java
 import java.io.Serializable;

public class Test implements Serializable {
     private Test() {
         System.out.println("Test");
     }
     public void say()
     {
       System.out.println("Hello!");
     }

 }

 

 

 

//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 constr = reflectionFactory  
                 .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核心类库放在一起,但没有任何说明,不知道是让谁用的.