toString() 应该 return 为 null 吗?
Should toString() ever return null?
如果无法进行转换,java 中的方法 toString()
应该 return 为 null 还是应该 return 在这种情况下改为空字符串?
toString()
返回 null 是非常糟糕的 API 设计。显然,如果您能够对其调用 toString()
,则该对象显然不为空。否则,就会出现 NullPointerException
.
这实际上取决于对象和用例。如果您使用 toString()
来执行真正的逻辑,则空字符串是可以的 - 例如,如果您使用 toString()
作为键值存储的键。如果单纯用于debugging/logging。只需打印出所有字段。例如,类似于 MoreObjects.toStringHelper() 所做的事情。
null 不是 String,所以这里不允许 return。检查 Java 文档:
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
它应该 return 对象的有意义的字符串表示形式。我写了一个例子来说明如何使用它以及它为什么有用:
public class Car {
private String make;
private int year;
public Car(String make, int year) {
this.make = make;
this.year = year;
}
@Overrride
public String toString() {
return "Car Make:" + make + "; Built Year: " + year;
}
}
示例:
Car myCar = new Car("Nissan", 1999);
Car yourCar = new Car("BMW", 2018);
System.out.println(myCar); // call toString() implicitly
System.out.println(yourCar);
它将打印 2 行,您可以轻松阅读文本并知道哪辆是您的车!
Car Make:Nissan; Built Year: 1999
Car Make:BMW; Built Year: 2018
Java API 文档,我检查过的每个最新版本都说:
Returns:
a string representation of the object.
换句话说,null 不是定义的 return 值。如果您不重写 toString() 方法,那么您将始终得到一个至少为您提供对象 ID 的字符串。
虽然这不排除重写方法 returning null 的可能性,但任何这样做的程序员都应该期望工具和框架会产生很多 NPE可能正在对该代码进行操作。
我的意见:不要这样做。
我的问题:什么样的对象不能用字符串表示?
如果无法进行转换,java 中的方法 toString()
应该 return 为 null 还是应该 return 在这种情况下改为空字符串?
toString()
返回 null 是非常糟糕的 API 设计。显然,如果您能够对其调用 toString()
,则该对象显然不为空。否则,就会出现 NullPointerException
.
这实际上取决于对象和用例。如果您使用 toString()
来执行真正的逻辑,则空字符串是可以的 - 例如,如果您使用 toString()
作为键值存储的键。如果单纯用于debugging/logging。只需打印出所有字段。例如,类似于 MoreObjects.toStringHelper() 所做的事情。
null 不是 String,所以这里不允许 return。检查 Java 文档:
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
它应该 return 对象的有意义的字符串表示形式。我写了一个例子来说明如何使用它以及它为什么有用:
public class Car {
private String make;
private int year;
public Car(String make, int year) {
this.make = make;
this.year = year;
}
@Overrride
public String toString() {
return "Car Make:" + make + "; Built Year: " + year;
}
}
示例:
Car myCar = new Car("Nissan", 1999);
Car yourCar = new Car("BMW", 2018);
System.out.println(myCar); // call toString() implicitly
System.out.println(yourCar);
它将打印 2 行,您可以轻松阅读文本并知道哪辆是您的车!
Car Make:Nissan; Built Year: 1999
Car Make:BMW; Built Year: 2018
Java API 文档,我检查过的每个最新版本都说:
Returns: a string representation of the object.
换句话说,null 不是定义的 return 值。如果您不重写 toString() 方法,那么您将始终得到一个至少为您提供对象 ID 的字符串。
虽然这不排除重写方法 returning null 的可能性,但任何这样做的程序员都应该期望工具和框架会产生很多 NPE可能正在对该代码进行操作。
我的意见:不要这样做。
我的问题:什么样的对象不能用字符串表示?