代码之家  ›  专栏  ›  技术社区  ›  jmpeace

你对返回日志语句有什么看法

  •  1
  • jmpeace  · 技术社区  · 16 年前

    我有这个Java代码:

    if(isNull(office) || isNull(pricelist)) {
        log.warn("The document {0}-{1} is not valid.",codDoc,numDoc);
        return null;
    }
    

    如果我把它改写为:

    if(isNull(office) || isNull(pricelist)) 
        return log.warn("The document {0}-{1} is not valid.",codDoc,numDoc);
    

    那样

    public void warn(String logLine, Object... args)
    {...}
    

    将成为:

    public Object warn(String logLine, Object... args)
    {...;return null;}
    

    考虑到日志记录在这个系统中是强制性的。 谢谢你的评论。

    5 回复  |  直到 16 年前
        1
  •  3
  •   Yishai    16 年前

    我永远不会这样做,因为它创建了一个令人惊讶的API。尤其在Java中,要点不是简洁,而是清晰。有一个额外的返回行是很有价值的,因为它告诉您返回与日志记录无关。

    如果你在一个方法中,它本身有一个空的返回,你无论如何都必须把返回放在一个单独的行上。

    无论如何,如果您声明它为返回对象,那么方法必须返回对象,否则您必须将其强制转换,这会变得更糟。你可以用仿制药来解决这个问题:

      public <T> T warn(String message, Object... params) { return null; }
    

    但在一般情况下,这似乎都不是一个好主意。

        2
  •  2
  •   qid    16 年前

    如果你总是从 warn 方法,那么它不会以任何方式产生任何差异;不会启用任何附加功能,也不会提供任何附加信息。只有当一些外部实体要求您的日志方法与签名匹配时,我才会执行更改。 Object 返回。

        3
  •  0
  •   Anthony M. Powers    16 年前

    这取决于您需要日志记录做什么。

    如果您的系统需要在日志记录过程中像创建异常一样创建一个对象,第二种方法(object warn())可能适用于您。

    这真的取决于你需要什么……

        4
  •  0
  •   Alexander Pogrebnyak    16 年前

    我认为按你的建议重写是不好的。

    有几个原因。

    1. 许多标准日志API都有 void 返回类型 warn 方法。为了 熟悉这些API的人 将是一个 惊奇 副作用
    2. 你的 警告 方法不返回 真正的对象,它总是返回 null . 这将是 惊奇 让维修人员发现。
        5
  •  0
  •   David Harris    16 年前

    使用第一种方法。

    原因是第二个方法意味着warn方法的返回值是有意义的。第二个方法(如文中所述)强制warn方法的返回值显示为warn方法调用方的返回值,这可能是错误的返回,特别是当设计具有处理各种警告条件的各种返回值时。