如何从一个类传递给另一个变量的名称(不是值)

时间:2013-01-03 10:42:12

标签: android

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

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 个答案:

答案 0 :(得分:0)

您需要使用反射。

以下是Oracle的教程:http://docs.oracle.com/javase/tutorial/reflect/index.html

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

this.getClass().getDeclaredField(the_Name_Of_TheVariable_I_get).set(this, 5);

答案 1 :(得分:0)

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

public int getValore(){
         return valore;
}

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

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

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

答案 2 :(得分: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 ..

答案 3 :(得分: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);
    }
}