valueOf()能否根据Java约定返回null?
在某些情况下,命名一个可能返回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()
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
对象,那么它是错误的。所以我不会用canvalueOf()
returnnull
这个问题来打扰自己。如果参数为空,我将使用IllegalArgumentException
或NullPointerException
。在这种情况下,我将参数限制为null
。如果它导致返回null
对象,那么它是错误的。所以我不会用canvalueOf()
returnnull
这个问题来打扰自己。如果参数为空,我会使用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。如果函数按照文档中的说明执行,那么您不会错:-)