如何在Java类构造方法中初始化数组?求正确实现方案
解决Java构造方法中数组参数的初始化问题
嘿,我明白你在初始化Sandwich类实例时遇到的数组参数问题了——直接写{"mayo", "extra meat"}这种数组字面量作为构造方法参数是行不通的,咱们来一步步修正这个问题~
你的代码问题点
你写的order[0] = new Sandwich('s', "pastrami", "swiss", extras[2] = {"mayo", "extra meat"} )有两个明显问题:
- 不能在方法参数里直接用
{...}的简写初始化数组,必须显式声明数组类型 extras[2] = ...这种写法完全没必要,你不需要给一个未定义的数组赋值,直接传递初始化好的数组即可
正确的两种写法
写法1:直接在参数中显式初始化数组
在构造方法参数里,用new String[]{"元素1", "元素2"}的形式创建并传递数组,这是最直接的方式:
public static void main(String[] args) { Sandwich[] order = new Sandwich[3]; // 直接在构造方法参数中初始化数组 order[0] = new Sandwich('s', "pastrami", "swiss", new String[]{"mayo", "extra meat"}); order[1] = new Sandwich('w', "turkey", "cheddar", new String[]{"lettuce", "tomato"}); // 如果没有额外配料,可以传递空数组或者null(根据你的setExtras方法逻辑调整) order[2] = new Sandwich('r', "ham", "provolone", new String[]{}); }
写法2:先声明数组变量再传递
如果配料列表较长或者需要复用,先单独声明数组变量会让代码更清晰:
public static void main(String[] args) { Sandwich[] order = new Sandwich[3]; // 先初始化配料数组 String[] pastramiExtras = {"mayo", "extra meat"}; order[0] = new Sandwich('s', "pastrami", "swiss", pastramiExtras); String[] turkeyExtras = {"lettuce", "tomato", "pickles"}; order[1] = new Sandwich('w', "turkey", "cheddar", turkeyExtras); order[2] = new Sandwich('r', "ham", "provolone", null); // 无配料时传递null(如果方法允许的话) }
为什么原来的写法不行?
在Java中,{...}这种数组字面量的简写只能用在变量声明语句中,比如:
// 这是合法的 String[] extras = {"mayo", "extra meat"};
但当你要把数组作为参数直接传递给方法(比如构造方法)时,必须用new 类型[]{...}的完整形式,明确告诉编译器你要创建一个新的数组对象。
内容的提问来源于stack exchange,提问作者DrSooch
相关产品推荐
相关产品推荐

