2015-04-28 1 views
2

J'utilise JavaPoet pour créer du code Java. Je définissais le tableau suivant:Affecter un tableau à une instruction MethodSpec dans JavaPoet?

String[] testArr = new String[] {"1","2"}; 

et un constructeur:

ArrayTypeName stringArray = ArrayTypeName.of(String.class); 

MethodSpec constroctMethod = MethodSpec.constructorBuilder() 
.addModifiers(Modifier.PUBLIC) 
        .addStatement("$T names", stringArray) 
        .addStatement("names = $N", testArr) 
        .build(); 

L'ancien ne fonctionne pas. Je veux créer la déclaration:

String[] names = new String[] {"1","2"}; 

Comment puis-je attribuer un tableau à une déclaration comme dans la ligne précédente?

Répondre

2

Vous ne pouvez pas utiliser MethodSpec pour créer la ligne d'initialisation de la chaîne de caractères, afaik. Vous avez besoin d'un CodeBlock simple et convertissez le tableau en un code source d'abord.

Voici un exemple utilisant Java 8 String.join pour construire le littéral à partir de votre tableau de test avec JavaPoet 1.3 (voir les expressions de format basées sur l'index).

@Test 
    public void testStringArrayInit() { 
    String expected = "java.lang.String[] names = new java.lang.String[] {\"1\",\"2\"}"; 
    String[] testArr = new String[] { "1", "2" }; 
    String literal = "{\"" + String.join("\",\"", testArr) + "\"}"; 
    ArrayTypeName stringArray = ArrayTypeName.of(String.class); 
    CodeBlock block = CodeBlock.builder().add("$1T names = new $1T $2L", stringArray, literal).build(); 
    Assert.assertEquals(expected, block.toString()); 
    }