如何使用CodeModel初始化2D数组 [英] How to initialise a 2D array using CodeModel

查看:70
本文介绍了如何使用CodeModel初始化2D数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要初始化如下的二维数组

I need to initialise a 2d array like below

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

但是它会启动一维数组,

but it initilases 1d array,

感谢您的帮助

推荐答案

它可能并不完全相同,但是以下代码初始化了示例2d数组:

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"}};
    }

}

您尝试的代码几乎是正确的,您只需要在newArray()调用中声明数组:JExpr.newArray(codeModel.ref(String.class).array())

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

这篇关于如何使用CodeModel初始化2D数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆