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


    编译失败:

    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 }
  • 相关阅读:
    软工作业06
    软工作业05
    软工作业00
    软工作业04
    软工作业03
    软工作业02
    我的随笔
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业05
    软件工程作业00——问题清单
  • 原文地址:https://www.cnblogs.com/DeRozan/p/6836125.html
Copyright © 2020-2023  润新知