toString()应该返回null吗?

时间:2018-04-24 23:49:14

标签: java string tostring

如果没有转换可以在java中的方法toString()返回null,或者在这种情况下它应该返回一个空字符串吗?

3 个答案:

答案 0 :(得分:2)

null不是String,因此不允许在此处返回。检查Java Docs:

  

返回对象的字符串表示形式。通常,toString方法返回一个"文本表示"的字符串。这个对象。结果应该是一个简洁但信息丰富的表示,便于人们阅读。建议所有子类都覆盖此方法。

它应该返回一个有意义的对象字符串表示。我写了一个如何使用它的例子以及它有用的原因:

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

答案 1 :(得分:1)

toString()返回null将是非常糟糕的API设计。显然,如果您能够在其上调用toString(),则该对象显然不为空。否则,会有NullPointerException

这实际上取决于Object和用例是什么。如果使用toString()来执行实际逻辑,则空字符串是可以的 - 例如,如果使用toString()作为键值存储的键。如果它只是用于调试/日志记录。只需打印出所有字段。例如,像MoreObjects.toStringHelper()那样的东西。

答案 2 :(得分:1)

Java API文档,我检查的每个最新版本都说:

  

<强>返回:       对象的字符串表示。

换句话说, null 不是定义的返回值。如果你没有覆盖 toString()方法,那么你将总是得到一个至少为你提供对象ID的字符串。

虽然这并不排除重写方法返回 null 的可能性,但任何执行此操作的程序员都应该从可能在该代码上运行的工具和框架中获得大量NPE。

我的意见:不要这样做。

我的问题:什么样的对象无法用字符串表示?