Java中首选的编码风格是哪种?

时间:2014-09-03 20:39:32

标签: java

#1:

proc(Collections.singleton(o));
proc(list);

public void proc(Collection<Object> collection) {
    // pre
    for (Object o : collection) {
        // main
    }
    // post
}
  • 更少行
  • 简单
  • wrap是客户端任务
  • 稍慢*(至少2个对象创建:SingletonSet,Iterator)

*也许这不是什么大问题,但如果该方法经常与单值一起使用会怎么样

#2:

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)

有什么建议吗?

5 个答案:

答案 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)

  1. 如果要构建供内部使用的内容,请根据需要创建方法。如果从不调用
  2. ,则无需为数组参数编写重载
  3. 如果要构建要在您的机构内共享的API,请遵循已定义的实践。应该有同事/建筑师/经理与之讨论,而不是SO。
  4. 如果您正在为一般公众构建API,请从您的错误跟踪器/邮件列表/论坛中获取输入。用户要求的是什么?

答案 2 :(得分:0)

就个人而言,我认为我从未见过#1。

即使在jdk中,你也会看到大量重载方法做同样的事情,但会收到不同类型的参数。

你应该总是让你班级的用户找到合适的方法,而不是强迫他做一些杂技,以便能够调用你的方法。

但这只是我的观点,代码风格总是可以记录的。

答案 3 :(得分:0)

这取决于什么 proc正在做什么,什么它应该作为参数接收。

例如,如果procsum函数,则sum(Collection<Integer> ints)完全合理,而sum(int i)根本没有意义,不应作为函数提供。< / p>

答案 4 :(得分:0)

保持API尽可能简单总是更好。因此,更好地执行相同方法的许多重载版本,而不是用户必须转换或包装参数。 Java代码约定可能很有用,这里http://www.oracle.com/technetwork/java/codeconventions-150003.pdf