传递字符串时,Java 构造函数可变参数冲突
我的一个班级有一个问题。我正在使用“varargs”构造函数来获取未知数量的参数。
public Groupe(String...nom){
for(String item:nom){
this.nom.add(item.toLowerCase());
}
}
public Groupe(String nom){
String[] list =nom.split(",");
for(String s : list){
this.nom.add(s.toLowerCase());
}
}
调用第一个构造函数...这很好,但是当仅向第二个构造函数传递一个参数时会发生冲突。我想在仅传递一个字符串时使用第二个构造函数,以及第一个 if 2 个和更多参数。
我想处理这个 new Groupe("Foo,Bar");
这就是我所说的。我怀疑“错误”来自那里
public void reserver(String...nom){
Groupe gr = new Groupe(nom);
passager.add(gr);
}
我没有传递字符串,而是传递了 Varargs (选项卡?)...
I have an issue with one of my class. I'm using a "varargs" constructor for unknown number of parameter.
public Groupe(String...nom){
for(String item:nom){
this.nom.add(item.toLowerCase());
}
}
public Groupe(String nom){
String[] list =nom.split(",");
for(String s : list){
this.nom.add(s.toLowerCase());
}
}
The first constructor is called...that's fine, but there is a conflict when passing only ONE parameter with the second contructor. I would like to use the second constructor when passing only one string, and the first if 2 and more parameters.
I'd want to handle this
new Groupe("Foo,Bar");
This is where I call it. I suspect the "error" comes from there
public void reserver(String...nom){
Groupe gr = new Groupe(nom);
passager.add(gr);
}
I don't pass a String, but a Varargs (tab?)...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
也许这可以是一个解决方案:
Maybe this can be a solution:
varargs 部分可以为空。所以你可以得到你想要的东西
当然,你也可以在输入数组的长度上使用一个带有 if 语句的 ctor,分割出情况 0(上面的代码未处理)、1 和 > 。 1.
The varargs part can be empty. So you can get what you want with
You could also, of course, use one ctor with an if statement on the length of the input array, splitting out cases 0 (not handled with the code above), 1, and > 1.
输出:
构造函数 1
构造函数 2
构造函数 1
Output:
Constructor 1
Constructor 2
Constructor 1
应该没问题,但需要注意的是
null
可以转换为String[]
或String
:编辑:现在您已经展示了我们调用代码,这肯定是问题所在:
这里,
nom
的类型是String[]
- 所以它总是调用第一个构造函数。你有一个字符串数组 - 在什么情况下你想调用第二个构造函数?老实说,鉴于这两个构造函数的行为显着不同,我实际上会将这两个构造函数设为私有,并提供静态方法:
这样您在每种情况下的期望就会绝对清楚。
It should be fine, with the caveat that
null
can be converted to eitherString[]
orString
:EDIT: Now that you've shown us the calling code, that's definitely the problem:
Here, the type of
nom
isString[]
- so it will always call the first constructor. You've got an array of strings there - under what circumstances do you want to call the second constructor?To be honest, given that the two constructors act significantly differently, I would actually make both constructors private, and provide static methods:
Then it will be absolutely clear what you're expecting in each case.