转-Cannot refer to an instance field arg while explicitly invoking a constructor

来源:互联网 发布:社交网络高清百度云 编辑:程序博客网 时间:2024/06/05 20:21
 

编译失败:

Cannot refer to an instance field arg while explicitly invoking a constructor  调用方法时不能引用一个实例变量

 

 1 package arkblue.lang.javapuzzler.n53; 2  3 class Thing { 4     public Thing(int i) { 5  6     } 7 } 8  9 public class MyThing extends Thing {10     private final int arg;11 12     public MyThing() {13         super(arg = Math.round(12L)); //编译失败14     }15 16 }

解决办法:使用了交替构造器调用机制(alternate constructor invocation)

在这个私有构造器中,表达式SomeOtherClass.func()的值已经被捕获到了变量i中,并且它可以在超类构造器返回之后存储到final类型的域arg中

 1 class SomeOtherClass { 2     static int func() { 3         return Math.round(12L); 4     } 5 } 6  7 public class MyThing extends Thing { 8     private final int arg; 9 10     public MyThing() {11         this(SomeOtherClass.func());12     }13 14     private MyThing(int i) {15         super(i);16         arg = i;17     }18 }

 

阅读全文
0 0