今天在修改MongoDB的Java驱动,猛然发现我的Foo类居然无法创建实例。
后来对比发现由于Foo是个内部类,因此无法直接反射创建其实例,代码原型如下:
1 public final class UnitTests 2 { 3 @Test 4 public void FooTest() throws IllegalAccessException, InstantiationException, NoSuchFieldException 5 { 6 Class c = Foo.class; 7 Foo obj = (Foo) c.newInstance(); 8 Field fi = c.getField("Name"); 9 10 fi.set(obj, "Foo:你的名字"); 11 12 System.out.println(obj.Name); 13 } 14 15 public final class Foo 16 { 17 public String Name; 18 } 19 }
到群里请教各位Java大神,无果。
但是我发现MongoDB驱动自带的一些示例是可以反射的,经过细致对比发现“需要在内部类上增加static修饰符”,即:
public static final class Foo
关于static关键字在java语言中的作用请参考:http://www.2cto.com/kf/201109/104884.html
请各位路过之人指点迷津!