对象能够继承字符串表示吗?

3
我有一个问题需要将对象显示为字符串:

我在将对象显示为字符串时遇到了以下问题:

class Gast{

    String voorNaam, achterNaam;
    datum geboorteDatum;

    Gast(String vNaam, String aNaam, datum input){

        voorNaam = vNaam;
        achterNaam = aNaam;
        geboorteDatum = input;
    }

    public String toString(){

        return("Naam: " + voorNaam + " " + achterNaam + " " + geboorteDatum);
    }
}

我在这里实现了一种将该对象表示为字符串的方法,但是当我试图在这个类中使用它时:

class Kamer{

    boolean vrij;
    Gast gast;

    Kamer(){}

    public String toString(){

         if(vrij == true){

             return "De kamer is vrij!";
         }

         else{

             return gast;
         }
    }
}

我遇到了以下错误:

kamer.java:17: error: incompatible types: Gast cannot be converted to String
        return gast;

我在Gast类中给出了一个对象的字符串表示形式,但其他类没有继承我给出的表示形式吗?


4
因为Gast不是字符串,所以您需要调用gast.toString() - markspace
谢谢你修复了错误!让我感觉有点傻哈哈。我应该保留这个问题吗? - Arkin Zoodsma
我应该保留这个问题吗?你别无选择,因为它有被点赞的答案... - Pshemo
你也许已经意识到了,我在 Stack Overflow 社区还很新,但感谢你们的帮助! - Arkin Zoodsma
1个回答

7

尝试:

return gast.toString();

编辑:如@Andreas评论所建议的那样,最好使用String.valueOf(gast),如果gast可能为空(或手动检查是否为null)


4
不要使用"" + gast,如果gast可能为空,请使用String.valueOf(gast)来代替这个糟糕的结构,后者会编译成new StringBuilder().append(gast).toString(),令人不寒而栗。 - Andreas
3
跟进:"" + gast 的结果是:分配一个 StringBuilder,分配一个长度为 16char 数组,分配一个实际长度未知的 char 数组,复制文本,分配一个字符串,分配一个长度不确定的 char 数组,复制文本。每次执行需要进行 4-5 次内存分配和 2 次文本复制,这会在运行时增加很多开销,只是为了省几个按键,这是我比较反感的地方。 - Andreas
1
@Andreas 好的,好的,我会把它删除的 :) - kcraigie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接