访问嵌套类中的变量

时间:2016-10-27 20:56:17

标签: java class

这可能是一个非常基本的问题,但我似乎无法从我所在类的另一部分访问变量。我试过this.p1,this.TwoParamRF.p1等等但我无法得到p1的值请帮忙。感谢。

   public class SecondMDP {

    public SecondMDP(double p1, double p2) {

        this.rf = new TwoParamRF(p1,p2);

    }

    public static class TwoParamRF implements RewardFunction {
        double p1;
        double p2;

        public TwoParamRF(double p1, double p2) {
            this.p1 = p1;
            this.p2 = p2;
        }
    }   


    public String bestActions(double gamma) {

        ValueIteration vi=computeValue(gamma);
        alert(p1);  //Getting error
        alert(p2);  //here

    }
}

2 个答案:

答案 0 :(得分:1)

  

我似乎无法从我所在类的其他部分访问变量。我尝试过.p1,this.TwoParamRF.p1等等,但我无法获得p1的值

的值 p1?您有一个静态嵌套类,其中包含该名称的成员变量,但不清楚您要访问该类的哪个实例。

您的外部类的构造函数确实为未声明的变量TwoParamRF分配了类rf的值。该对象包含成员p1p2,外部类bestActions()方法原则上可以访问。但它只能通过TwoParamRF类型的引用来实现 - 如果变量rf被声明为RewardFunction,那么您需要将其强制转换为TwoParamRF:< / p>

((TwoParamRF) rf).p1

但当然这不是类型安全的。只有当你可以依赖rf总是成为TwoParamRF时,它才是可行的方法,在这种情况下,它应该被宣布为开始时的方式,或者如果你在施法前进行测试(例如通过instanceof),在这种情况下,您需要在测试失败时进行回退。

总的来说,您的代码似乎需要重构。假设rf确实被声明为RewardFunction,请考虑您可以并且应该声明所有RewardFunction要实现的方法及其客户端要使用的方法。还要考虑bestActions()&#39;的哪一部分?行为特定于TwoParamRF,以及如何将该部分移至TwoParamRF

答案 1 :(得分:0)

外部类和嵌套静态类之间的唯一区别是可以访问类私有静态字段。否则,访问规则保持不变。字段p1p2属于嵌套类的对象,无法从&#34; parent&#34;的实例访问。类;您需要从父类引用TwoParamRF对象。如果bestActions()仅取决于嵌套类的参数,则应考虑将{{1}}放入嵌套类中。