这可能是一个非常基本的问题,但我似乎无法从我所在类的另一部分访问变量。我试过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
}
}
答案 0 :(得分:1)
我似乎无法从我所在类的其他部分访问变量。我尝试过.p1,this.TwoParamRF.p1等等,但我无法获得p1的值
的值 p1
?您有一个静态嵌套类,其中包含该名称的成员变量,但不清楚您要访问该类的哪个实例。
您的外部类的构造函数确实为未声明的变量TwoParamRF
分配了类rf
的值。该对象包含成员p1
和p2
,外部类bestActions()
方法原则上可以访问。但它只能通过TwoParamRF
类型的引用来实现 - 如果变量rf
被声明为RewardFunction
,那么您需要将其强制转换为TwoParamRF
:< / p>
((TwoParamRF) rf).p1
但当然这不是类型安全的。只有当你可以依赖rf
总是成为TwoParamRF
时,它才是可行的方法,在这种情况下,它应该被宣布为开始时的方式,或者如果你在施法前进行测试(例如通过instanceof
),在这种情况下,您需要在测试失败时进行回退。
总的来说,您的代码似乎需要重构。假设rf
确实被声明为RewardFunction
,请考虑您可以并且应该声明所有RewardFunction
要实现的方法及其客户端要使用的方法。还要考虑bestActions()
&#39;的哪一部分?行为特定于TwoParamRF
,以及如何将该部分移至TwoParamRF
。
答案 1 :(得分:0)
外部类和嵌套静态类之间的唯一区别是可以访问类私有静态字段。否则,访问规则保持不变。字段p1
和p2
属于嵌套类的对象,无法从&#34; parent&#34;的实例访问。类;您需要从父类引用TwoParamRF
对象。如果bestActions()
仅取决于嵌套类的参数,则应考虑将{{1}}放入嵌套类中。