如何创建带String[]类型参数的对象实例?数组初始化报错
解决Java构造器传数组时的初始化报错问题
这个问题我之前踩过坑!你遇到的报错是因为Java的语法规则限制:直接用{"元素1", "元素2"}这种数组初始化语法作为方法/构造器的实参是不允许的,这种简写形式只能在声明数组变量并同时赋值的时候使用。
两种可行的解决方案(都不需要用可变参数)
方案1:先创建数组变量再传递
先把数组实例化到一个变量里,再把变量传给构造器,写法清晰直观:
public class ProfileTest{ public static void main(String[] args) { // 先声明并初始化数组变量 String[] userInterests = {"Interest1","Interest2","Interest3"}; // 把变量传给构造器 Profile newProfile = new Profile(userInterests); } }
方案2:直接在构造器参数中显式创建数组
如果不想额外声明变量,可以直接用new String[]{...}的形式在参数位置创建数组实例,这是Java允许的写法:
public class ProfileTest{ public static void main(String[] args) { // 显式创建数组并作为参数传递 Profile newProfile = new Profile(new String[]{"Interest1","Interest2","Interest3"}); } }
为什么原来的写法会报错?
Java规定,数组初始化器({...})只有在变量声明语句的赋值部分才能省略new String[]关键字。比如:
// 合法:声明变量时用简写初始化 String[] arr = {"a", "b"};
但直接把{...}作为方法参数传递时,编译器无法自动推断这是一个数组实例,必须显式写出new String[]来明确创建数组对象。
内容的提问来源于stack exchange,提问作者Sian Pike
相关产品推荐
相关产品推荐

