Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java方法最佳实践_Java_Methods - Fatal编程技术网

Java方法最佳实践

Java方法最佳实践,java,methods,Java,Methods,考虑使用对象作为参数的方法。在方法中检查对象是否为NOTNULL是一种好的做法,还是应该在调用该方法之前检查它。我感觉如果有人稍后使用该方法,如果他们为参数传递null,该方法将无法传达它缺少的内容。请从以下方法中选择最佳方法 方法1: void method(Object obj1, Object obj2) { if(obj1!=null && obj2!=null {} } 方法2: void method(Object obj1, Object obj2) {

考虑使用对象作为参数的方法。在方法中检查对象是否为NOTNULL是一种好的做法,还是应该在调用该方法之前检查它。我感觉如果有人稍后使用该方法,如果他们为参数传递null,该方法将无法传达它缺少的内容。请从以下方法中选择最佳方法

方法1:

void method(Object obj1, Object obj2)
{
  if(obj1!=null && obj2!=null
  {}
}
方法2:

void method(Object obj1, Object obj2)
{
  //logic
}
方法3:

void method(Object obj1, Object obj2)
{
  if(obj1 ! =null && obj2 !=null)
  {//logic}

  throw exception();
}

在将参数传递给方法之前检查参数是否为null是必须在客户端解决的问题


关于方法编写的最佳实践:我认为对传递的参数的有效性不作任何假设是一个好的实践。如果您的方法无法使用传递的空参数进行操作,则应该抛出IllegalArgumentException。

在这种情况下,您可以做一些事情。我建议做的第一件事是使用或类似(
@Nullable
@Nonnull
)来显式地将参数或方法标记为接受或返回null。如果您的IDE配置正确,它将知道这些,并尝试防止空指针

public void foo(@Nonnull Bar bar) {
如果在请求非null时参数为null,则可以抛出一个
IllegalArgumentException
。这将使应用程序崩溃,责任将落在开发人员身上

    if (bar == null) throw new IllegalArgumentException("bar cannot be null");
有一些库具有用于此的方法。e、 g.番石榴的
先决条件
和Commons Lang的
验证
。它们还具有用于其他验证的方法,例如范围和状态

Java8还有一个方法
Objects.requireNonNull()


在公共API中,我总是执行类似于
对象的操作。requireNotNull(obj1,“obj1不能为null”)
。制定规则并保持一致。我的任务是检查公共函数中的所有输入参数,而不是在私有方法中。因此,当我发现自己在同一个函数调用之外一遍又一遍地执行null验证时,是时候重新设计了。您的建议的一个重要方面是,您将确切地知道错误所在:如果因为obj1为null或ob2为null而抛出异常,您不知道是哪个,这使得调试更加困难。@AndyTurner我不止一次因此被称为paranoid。你可以通过记录每个参数的要求以及如果不满足要求会发生什么来解决这个问题。不要依赖调用代码来强制执行先决条件。如果它与代码有关,请在代码中进行检查。
    Objects.requireNonNull(bar);
    Preconditions.checkNotNull(bar);
    Validate.notNull(bar);