Как инициализировать 2D-массив с использованием CodeModel - PullRequest
0 голосов
/ 22 апреля 2019

Мне нужно инициализировать 2d-массив, как показано ниже

     Object[][] someName = {
                             {"param1","param2","param3"}, 
                             {"param4","param5","param6"}
                            };

Я пытался как

    JExpression exp = JExpr.newArray(codeModel.ref(String.class)).add(JExpr.lit("param1").add(JExpr.lit("param2"));

    methodBlock.decl(JMod.NONE, codeModel.ref(Object.class).array().array(), dataProviderName, exp);

, но он инициализирует 1d-массив,

любая помощь приветствуется

1 Ответ

1 голос
/ 23 апреля 2019

Возможно, это не совсем то же самое, но следующий код инициализирует пример 2d массива:

JDefinedClass testClass = codeModel._class("TestClass");

JMethod runme = testClass.method(JMod.PUBLIC, codeModel.VOID, "runme");
JBlock methodBlock = runme.body();

JExpression exp = JExpr.newArray(codeModel.ref(String.class).array())
    .add(JExpr.newArray(codeModel.ref(String.class))
                        .add(JExpr.lit("param1")).add(JExpr.lit("param2")).add(JExpr.lit("param3")))
    .add(JExpr.newArray(codeModel.ref(String.class))
                        .add(JExpr.lit("param4")).add(JExpr.lit("param5")).add(JExpr.lit("param6")));

methodBlock.decl(JMod.NONE, codeModel.ref(Object.class).array().array(), "someName", exp);

Это генерирует следующее, которое явно объявляет внутренние массивы:

public class TestClass {


    public void runme() {
        Object[][] someName = new String[][] {new String[] {"param1", "param2", "param3"}, new String[] {"param4", "param5", "param6"}};
    }

}

Код, который вы пробовали, был почти верным, вам просто нужно было объявить массив в вызове newArray(): JExpr.newArray(codeModel.ref(String.class).array())

...