gpt4 book ai didi

java - 索引变量字符串参数时出现 NullPointerException

转载 作者:行者123 更新时间:2023-11-29 09:44:38 24 4
gpt4 key购买 nike

我不熟悉使用省略号的想法。我几乎可以肯定我的错误是由于不正确地声明或初始化“String[] authors”造成的,但我不知道如何做到这一点并且仍然有我的 setAuthors方法工作。

import java.util.*;
public class Book {
private String[] authors; //I'm guessing this line should end with "= new String..."
//but not sure how to w/o specifying an array dimension
private int authorsSize;

//Receives variable # of String parameters and indices them into String[] "authors"
public void setAuthors(String... authors) {
authorsSize = authors.length;
for(int i=0;i<authorsSize;i++)
this.authors[i] = authors[i];
}

//获取作者方法:

    public String getAuthors(){
String s = "";
authorsSize = authors.length;
for(int i=0;i<authorsSize;i++)
s = s+authors[i] + ", ";
printAuthors = s;
return s;
}

最佳答案

最简单的方法就是克隆数组:

public void setAuthors(String... authors){
this.authors = (String[]) authors.clone();
}

毕竟,无论如何你都是在覆盖之前的数据,在方法调用之前你无法知道大小。此时您不需要 authorsSize 变量 - 您已经有了知道自己长度的 authors 数组。

(如果您能够使用不可变集合,当然,您甚至不需要费心克隆。)

编辑:如评论中所述,如果您传入空引用,此方法将抛出异常。您不应该自动决定这是您应该“处理”的情况 - 记录参数不能为 null 是完全合法的。我建议记录围绕无效性的行为无论哪种方式

事实上,如果您这样做,您可能想要像这样初始化您的实例字段:

private String[] authors = new String[0];

这样您就可以始终知道您将在该字段中拥有一个非空引用,因此您可以不受惩罚地使用它。我宁愿这样做,也不愿在每次使用时都检查 null。

关于java - 索引变量字符串参数时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13412770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com