java.lang.NullPointerException: null
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:770) ~[spigot-1.12.2.jar:git-Spigot-c3093ef-7e94e65]
    at com.google.common.base.Joiner.toString(Joiner.java:454) ~[spigot-1.12.2.jar:git-Spigot-c3093ef-7e94e65]
    at com.google.common.base.Joiner.appendTo(Joiner.java:106) ~[spigot-1.12.2.jar:git-Spigot-c3093ef-7e94e65]
    at com.google.common.base.Joiner.appendTo(Joiner.java:154) ~[spigot-1.12.2.jar:git-Spigot-c3093ef-7e94e65]
    at com.google.common.base.Joiner.join(Joiner.java:197) ~[spigot-1.12.2.jar:git-Spigot-c3093ef-7e94e65]
    at com.google.common.base.Joiner.join(Joiner.java:187) ~[spigot-1.12.2.jar:git-Spigot-c3093ef-7e94e65]
    at com.google.common.base.Joiner.join(Joiner.java:205) ~[spigot-1.12.2.jar:git-Spigot-c3093ef-7e94e65]


编码:

public static String join(String[] args, int ignored, String separator) {

    if (ignored > -1)
        args = (String[]) ArrayUtils.remove(args, ignored);

    String combined = Joiner.on(separator).join(args); // ERROR HERE

    return combined.substring(0, combined.length());
}


我正在尝试完成使用分隔符连接字符串数组的操作,以及在需要时忽略参数的选项。但是我遇到了大约一个星期前没有出现的错误。这段代码运行得很好。我尝试为“ args”变量插入空检查,但无济于事。我从中取出的包裹有什么变化吗?

最佳答案

我不认为args变量为null,而是包含null值。
Guava的Joiner在默认情况下是对null不利的,但是可以将其配置为以以下两种方式之一容忍null:


Joiner.on(separator). skipNulls()
Joiner.on(separator). useForNull(placeHolder)


如果您不使用它们中的任何一个,则数组中的null值将引发NullPointerException,这在the Joiner docs中明确提到:


  如果未指定skipNulls()useForNull(String),则
  如果有任何给定元素,则连接方法将抛出NullPointerException
  是null

10-06 14:30