How to initialise a 2D array using CodeModel

前端 未结 1 1086
有刺的猬
有刺的猬 2021-01-26 04:25

I need to initialise a 2d array like below

     Object[][] someName = {
                             {\"param1\",\"param2\",\"param3\"}, 
                                


        
1条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-01-26 05:07

    It might not be exactly the same, but the following code initializes the example 2d array:

    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);
    

    This generates the following, which explicitly declares the inner arrays:

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

    The code you tried was almost correct, you just needed to declare the array within the newArray() call: JExpr.newArray(codeModel.ref(String.class).array())

    0 讨论(0)
提交回复
热议问题