我在一些Java编程竞赛中找到了一项任务。必须创建只有一个参数'text'且只有一个构造函数的类Sentence。这是示例测试代码:
Sentence s1=new Sentence("only","CAT"),
s2=new Sentence("and", 2, "mice"),
s3=new Sentence(s1,s2,"completely","alone"),
s4=new Sentence(s3, "on the ", new Integer(32), "th street");
System.out.println(s1); Only cat.
System.out.println(s2); Only cat and 2 mice.
System.out.println(s3); Only cat and 2 mice completely alone.
System.out.println(s4); Only cat and 2 mice completely alone on the 32th street.
一个构造函数如何提供不同的参数集?有没有像动态构造函数那样识别发送值的东西?
答案 0 :(得分:7)
利用varargs。
public class Sentence {
public Sentence(Object... text) {
// ...
}
}
自己填写构造函数逻辑。然而,确定所有类型可能会有点糟糕。您可以使用Object#toString()
并让Sentence
类同时实现一个。
答案 1 :(得分:2)
是的,java 5+支持varargs - 您可以传递相同类型的多个参数,如下所示:
public Constructor(Object... args){..}
public void methodName(Object... args){..}
然后,参数可以作为Object
的数组访问。但这并不总是一个好习惯。 Varargs只应用于具有相同逻辑类型的参数。例如,名称列表。如果应该传递多个参数,我建议重载构造函数。
在这种情况下,参数都是相同的逻辑类型 - “word”,所以这是一个很好的方法。
答案 2 :(得分:1)
如果接受Object ...值,则可以使用toString将任何内容转换为字符串。 toString是在Object上定义的,因此每个Object都应该支持它。