valueOf()能否根据Java约定返回null?

valueOf()能否根据Java约定返回null?,java,naming-conventions,Java,Naming Conventions,在某些情况下,命名一个可能返回null的命名构造函数valueOf是否可以接受 例如,bar()是一个命名构造函数,如果参数为null,它可能返回null class Foo { public static Foo bar(String value) { if (value == null) return null; else return new Foo(); } } 将其命名为valueOf()

在某些情况下,命名一个可能返回null的命名构造函数
valueOf
是否可以接受

例如,
bar()
是一个命名构造函数,如果参数为
null
,它可能返回
null

class Foo {
    public static Foo bar(String value) {
        if (value == null)
            return null;
        else
            return new Foo();
    }
}
将其命名为
valueOf()
会违反Java惯例吗?如果没有,我将把它移到助手处


EDIT:该方法是一个助手,如果我需要的值为null,则必须返回null。

我认为有这样一个返回
null
的方法没有问题,允许您在Javadoc摘要中显式记录它将这样做的情况,以便使用该方法的任何人都可以理解它将在何时发生


还有一点迂腐的注释:
bar()
不是构造函数。

我认为有这样一个返回
null
的方法没有问题,只要您在Javadoc摘要中明确地记录它将这样做的情况,这样使用此方法的任何人都可以理解它何时发生


还有一点迂腐的说明:
bar()
不是构造函数。

因为它实际上不是构造函数,所以你可以用它做任何你想做的事情。但是如果您担心调用方,您可能需要考虑抛出一个
NullPointerException
,而不是返回
null

因为它实际上不是构造函数,所以您可以使用它做任何您想做的事情。但是如果您担心调用方,您可能会考虑抛出一个
NullPointerException
而不是返回
null

通常,我投反对票。根据我的经验,
valueOf
方法在不知道如何转换输入时会抛出异常。如果输入为null,可以为返回null设置参数,但这是我能看到的唯一情况。

通常,我投反对票。根据我的经验,
valueOf
方法在不知道如何转换输入时抛出异常。如果输入为null,则可以为返回null设置参数,但这是我能看到的唯一情况。

对我来说,最佳做法是在值为
null
时抛出
NPE
,如果出现其他问题,则抛出其他面向问题的异常。这背后的主要动机是
null
更多地表示“未知”。我通常期望
instanceof
测试在
valueOf
成功时返回true。
null

的情况并非如此。对我而言,最佳做法是在值为
null
时抛出一个
NPE
,并在出现其他问题时抛出一些其他面向问题的异常。这背后的主要动机是
null
更多地表示“未知”。我通常期望
instanceof
测试在
valueOf
成功时返回true。对于
null

,情况并非如此。在这种情况下,我会将参数限制为
null
。如果它导致返回
null
对象,那么它是错误的。所以我不会用can
valueOf()
return
null
这个问题来打扰自己。如果参数为空,我将使用
IllegalArgumentException
NullPointerException

在这种情况下,我将参数限制为
null
。如果它导致返回
null
对象,那么它是错误的。所以我不会用can
valueOf()
return
null
这个问题来打扰自己。如果参数为空,我会使用
IllegalArgumentException
NullPointerException

没有“命名构造函数”这样的东西。@Jon Skeet:我想他指的是工厂方法。但通常工厂方法不命名为valueOf,只接受一个参数。@Jon Skeet-术语“命名构造函数”的一种用法,指工厂方法而不是语言功能--@Andy:是的,给出这个问题的意思很清楚-但OP应该知道这不是标准术语。@Jon Skeet:“Java社区中的非标准术语”比“没有这样的东西”更好地传达了这一点。没有“命名构造函数”这样的东西。@Jon Skeet:我想他指的是工厂方法。但工厂方法通常不命名为valueOf,只取一个参数。@Jon Skeet-术语“命名构造函数”的一种用法“引用工厂方法而不是语言功能--@Andy:是的,给出问题的意思很清楚-但是OP应该知道这不是标准术语。@Jon Skeet:“Java社区中的非标准术语”比“没有这样的东西”更好地传达了这一点。实际上,它必须根据我的需要返回空值。不管怎样。只需确保您对函数进行了Javadoc。如果函数按照文档中的说明执行,那么您不会错:-)实际上,它必须根据我的需要返回null。无论哪种方式。只需确保您对函数进行了Javadoc。如果函数按照文档中的说明执行,那么您不会错:-)