从调用函数的实例访问变量

时间:2018-02-20 20:11:13

标签: java function oop

在我正在参加的一个研究生课程中,我获得了一个库,该库声明了一个我希望定义的抽象函数。功能定义如下:

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上找到类似的问题),但我很乐意提及这个答案。

4 个答案:

答案 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()
}