0

Class Aで作成した変数の名前を に渡す必要があるClass 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

次のアプローチを使用することもできます。

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 に答える
0

なぜ変数名が必要なのですか? 変数自体を渡すだけです。クラス B でメソッドを作成する

public int getValore(){
         return valore;
}

次に、クラス A でコードを次のように変更します。

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

ここで何を達成しようとしているのかよくわかりませんか?

于 2013-01-03T10:45:38.617 に答える