proc(Collections.singleton(o));
proc(list);
public void proc(Collection<Object> collection) {
// pre
for (Object o : collection) {
// main
}
// post
}
*也许这不是什么大问题,但如果该方法经常与单值一起使用会怎么样
proc(o);
proc(list);
public void proc(Object o) {
// pre
// main
// post
}
public void proc(Collection<Object> collection) {
// pre
for (Object o : collection) {
// main
}
// post
}
或类似问题:(数组和列表参数)与(仅列表参数并使用Arrays.asList)
有什么建议吗?
答案 0 :(得分:4)
您应该向服务/ API的使用者公开有用的东西。如果使用单个对象调用该方法是合理的并且经常发生,则应该提供该方法。
话虽如此,你应该避免重复自己。以下是我的建议:
proc(o);
proc(list);
public void proc(Object o) {
proc(Collections.singleton(o));
}
public void proc(Collection<Object> collection) {
// pre
for (Object o : collection) {
// main
}
// post
}
担心Collections.singleton
的优化在这里不值得
答案 1 :(得分:0)
答案 2 :(得分:0)
就个人而言,我认为我从未见过#1。
即使在jdk中,你也会看到大量重载方法做同样的事情,但会收到不同类型的参数。
你应该总是让你班级的用户找到合适的方法,而不是强迫他做一些杂技,以便能够调用你的方法。
但这只是我的观点,代码风格总是可以记录的。
答案 3 :(得分:0)
这取决于什么 proc正在做什么,什么它应该作为参数接收。
例如,如果proc
是sum
函数,则sum(Collection<Integer> ints)
完全合理,而sum(int i)
根本没有意义,不应作为函数提供。< / p>
答案 4 :(得分:0)
保持API尽可能简单总是更好。因此,更好地执行相同方法的许多重载版本,而不是用户必须转换或包装参数。 Java代码约定可能很有用,这里http://www.oracle.com/technetwork/java/codeconventions-150003.pdf