2017-07-18 1 views
0

J'ai une méthode doStuff (String arg1). Je l'appelle depuis l'objet someObject, en lui passant le "nom de la constante" comme argument String. Puis-je obtenir la valeur de cette variable dans la méthode doStuff?Passage d'arguments java8

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)' –

Répondre

1

Pas tout à fait sûr de ce que vous demandez, mais vous pouvez obtenir la valeur par réflexion, comme ceci. (Il imprimera CONSTANT)

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

grâce, il fonctionne – intersect

0

Si vous voulez passer l'attribut: SOME_CONST

public static final String SOME_CONST = "someString"; 

En tant que paramètre pour: doMoreStuff(...) Vous devez écrire ceci: doMoreStuff(SOME_CONST);

Parce que doMoreStuff("SOME_COST"); passera comme paramètre le String "SOME_COST" et pas la variable

1

essayez ceci: someObject.doStuff(Class2.SOME_CONST); au lieu de someObject.doStuff("SOME_CONST");