2013-01-03 77 views
0

我需要將在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 
     } 
} 

回答

0

您將需要使用反射此。

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

你不能在運行時得到變量的名字雖然。但假設你有該字段的名稱代碼將看起來像這樣:

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

沒有,一個這個。的getClass()是B類,它不具備現場 – njzk2

0

爲什麼你需要變量名?只需傳遞變量本身。在B類創建

public int getValore(){ 
     return valore; 
} 

然後在A級使用修改代碼,

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

我真的不明白你正試圖在這裏實現什麼樣的方法?

+0

在B類我必須修改類A創建了一個變量的值,但是,在B類,我不知道該變量的名稱。所以我需要將變量本身傳遞給B類。它必須是動態的。在A類中,我可以有100個變量,而在B類中,我不知道他們的名字。 – MDP

0

您也可以使用下面的appraoch:

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 ..

0

你可以通過命名變量"valore"的,那麼你就需要反思將其分配在你的方法:

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

,可以將其參數了。 (有必要給予擁有該成員的實例)。

但是,這不是一個推薦的處理問題的方式,因爲它是不可靠的,因爲編譯器將無法檢查您是否正在訪問實際存在的項目。

這將是更好的使用接口,例如:

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); 
    } 
} 
相關問題