zoukankan      html  css  js  c++  java
  • 转-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 }
  • 相关阅读:
    Uncaught TypeError: Illegal invocation
    数组循环
    二维码
    验证码
    user_agent
    ip
    jquery操作dom
    php 正则
    hdu 4850 Wow! Such String! 欧拉回路
    leetcode Maximal Rectangle 单调栈
  • 原文地址:https://www.cnblogs.com/DeRozan/p/6836125.html
Copyright © 2011-2022 走看看