【发布时间】:2015-12-04 22:44:13
【问题描述】:
代码
public class TestOverload {
public TestOverload(int i){System.out.println("Int");}
public TestOverload(char... c){System.out.println("char");}
public static void main(String[] args) {
new TestOverload('a');
new TestOverload(65);
}
}
输出
Int
Int
这是预期的行为吗?如果是这样,那为什么?我期待:char,Int
注意:我使用的是 Java 8
【问题讨论】:
-
解决方案 - 添加一个
(char)方法 -
他们在那里做出了有趣的设计选择。在 C# 中,我相信 '...' 的等价物是参数。 C# 会选择 char,我认为更明智的行为,但它当然是另一种语言。
-
@NathanCooper:可变参数是在相当晚的时候添加的,因此它们极低的优先级对于向后兼容,或者更确切地说是库的可进化性是必要的。您不希望现有客户端突然选择不同的重载,只是因为您向现有公共 API 添加了可变参数重载。
-
哪种方法可以采用 int 或 char 并根据参数类型做一些与众不同的事情。不是理论上,而是实际上。如果你能回答这个问题,你能告诉我你会给这样一个函数起什么名字,为什么重载它比使用不同的名字更好?仅发生在
TestOverload()的问题并不是真正的问题。
标签: java overloading