2017-07-18 12 views
0

私はdoStuff(String arg1)メソッドを持っています。 私はオブジェクトsomeObjectからそれを呼び出し、 "定数名"をString引数として渡します。 この変数の値をdoStuffメソッド内で取得できますか?以下のためのパラメータとしてSOME_CONST引数を渡すjava8

public static final String SOME_CONST = "someString"; 

:あなたは属性を渡したい場合は

public Class1 { 
    someObject.doStuff("SOME_CONST"); 
} 


public Class2 { 
    public static final String SOME_CONST = "someString"; 

    public void doStuff(String arg1) { 
      doMoreStuff(arg1); 
    } 

    // expected: doMoreStuff("someString"), but actual: 
    doMoreStuff("SOME_CONST"). 
} 
+2

'someObject.doStuff(Class2.SOME_CONST)(これは、CONSTANTに印刷されます)、それが動作' –

答えて

1

あなたが何を求めているのかは完全には分かりませんが、このように反射によって値を得ることができます。

public static class Class1 { 
    public static void main(String[] args) { 
     new Class2().doStuff("SOME_CONST"); 
    } 
} 

public static class Class2 { 
    public static final String SOME_CONST = "CONSTANT"; 

    public void doStuff(String const_name) { 
     try { 
      String const_value = (String) Class2.class.getDeclaredField(const_name).get(null); 
      System.out.println(const_value); 
     }catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

おかげで、 – intersect

0

doMoreStuff(...) あなたはこれを記述する必要があります。doMoreStuff(SOME_CONST);

doMoreStuff("SOME_COST");ので、パラメータとして渡しますString "SOME_COST"と変数ではありません

1

試してみてください:someObject.doStuff(Class2.SOME_CONST);の代わりにsomeObject.doStuff("SOME_CONST");