在我正在参加的一个研究生课程中,我获得了一个库,该库声明了一个我希望定义的抽象函数。功能定义如下:
public abstract class one {
public abstract int evaluate(int arg0);
}
public class two extends one {
// my implementation of the function
public int evaluate(int arg0) {
// do something here
// Access the variable a in main here
}
}
public static void main() {
two sampleObject = new two();
int a = 0;
two.evaluate(10);
}
我想访问main
函数中evaluate
类的变量。我不允许更改功能的足迹。如何访问main中声明的成员变量?如果定义由我自行决定,我会将一个额外的参数传递给evaluate
函数或将this
参数传递给evaluate
函数以访问在main中声明的成员变量。 / p>
注意:如果这个问题被证明是重复的(我认为虽然我没有在SO上找到类似的问题),但我很乐意提及这个答案。
答案 0 :(得分:0)
不,你不能这样做。 Java是一种按值传递的语言。考虑到您的变量是在方法(方法局部变量)中声明的,您永远不能在该方法之外更改其值。
答案 1 :(得分:0)
虽然以下可能是一个糟糕的设计,但可能满足您的需求:
class CallingClass {
private static type field;
public static type getField() {
return field;
}
public static void setField(type var) {
field = var;
}
public static void main(String args[]) {
field = value;
}
}
class CallerClass extends YourClass {
public int evaluate(int arg) {
CallingClass.getField();
CallingClass.setField(calculatedValue);
}
}
答案 2 :(得分:0)
您无法访问另一个范围中的变量。如果evaluate()
计算结果,那么您应该只return
:
public class two extends one {
// my implementation of the function
public int evaluate(int arg0) {
int result = 0;
// calculate the result
return result;
}
}
然后在main()
中,您可以使用返回值(例如
public static void main() {
two sampleObject = new two();
int a = sampleObject.evaluate(10);
}
请注意,您必须使用引用变量调用evaluate()
,而不是使用类名。
答案 3 :(得分:0)
如果您的局部变量是一个数组或可变对象,那么您可以在另一个方法中访问和更改其元素/内部状态。例如,
public class two extends one {
// my implementation of the function
public int evaluate(int... arg0) {
// do something here
// Access the variable a in main here
arg0[0] = 5;
}
}
public static void main() {
two sampleObject = new two();
int[] a = { 0 };
two.evaluate(a);
System.out.println(a[0]); //prints 5, the value that we set in evaluate()
}