0

我需要将在 中创建的变量的名称传递Class AClass B,因此我可以在该变量中放入一个值(在Class B)。但是,在 BI 类中不知道该变量的名称。代码是这样的:

A级

public class A {
      int valore; // this is the variable, in Class b, I don't know this name!
      public  void callClassB(){
            ClassB.Method(what shoudld i put here?)
      }
}

这是B类

public class B {              
       public void Method(the_Name_Of_TheVariable_I_get){
             the_Name_Of_TheVariable_I_get = 5; // i need to do this
       }
}
4

4 回答 4

0

您可以传递变量的名称"valore",然后您需要反射在您的方法中分配它:

a = new A();
Field f = a.getClass().getDeclaredField(varName);
f.set(a, 5);

a 也可以是一个参数。(必须给出拥有该成员的实例)。

但是,这不是处理您的问题的推荐方法,因为从某种意义上说编译器将无法检查您正在访问实际存在的项目是不可靠的。

最好使用接口,例如:

public interface Settable {
    public void set(int value);
}

接着:

public class A implements Settable {
    private int valore;
    public void set(int value) {
        valore = value;
    }
    public  void callClassB(){
        ClassB.Method(this);
    }
}

在 B 中:

public class B{      
    public void Method(Settable settable){
        settable.set(5);
    }
}
于 2013-01-03T10:55:47.967 回答
0

为什么需要变量名?只需传递变量本身。在 B 类中创建一个方法

public int getValore(){
         return valore;
}

然后在 A 类中使用修改代码为

public  void callClassB(){
            ClassB.Method(getValore())
       }

我真的不明白你想在这里实现什么?

于 2013-01-03T10:45:38.617 回答
0

您还可以使用以下方法:

interface ValueSetter {
      void setValue(int value);
}

A级

public class A implements ValueSetter{
int valore;

      public  void callClassB(){
            ClassB.Method(this)
       }

         void setValue(int value){
            valore = value;
         }
}

这是B级

public class B{      

          public  void Method(ValueSetter valueSetter){
               ValueSetter.setValue(5); 
           }
    }

这更符合 OOPS ..

于 2013-01-03T10:49:53.817 回答
0

您将需要为此使用反射。

这是来自 Oracle 的教程:http: //docs.oracle.com/javase/tutorial/reflect/index.html

但是,您无法在运行时获取变量的名称。但是假设你有字段的名称,代码看起来像这样:

this.getClass().getDeclaredField(the_Name_Of_TheVariable_I_get).set(this, 5);
于 2013-01-03T10:44:48.430 回答