【问题标题】:How to initialise a 2D array using CodeModel如何使用 CodeModel 初始化二维数组
【发布时间】:2019-04-22 07:03:18
【问题描述】:

我需要像下面这样初始化一个二维数组

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

但它会初始化一维数组,

感谢任何帮助

【问题讨论】:

    标签: sun-codemodel jcodemodel


    【解决方案1】:

    可能不完全相同,但以下代码初始化示例二维数组:

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

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 2011-12-08
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多