Java toString()与MVC

Java toString()与MVC,java,model-view-controller,tostring,presentation,Java,Model View Controller,Tostring,Presentation,toString()的API文档说明: 返回对象的字符串表示形式。总的来说 toString方法返回一个字符串,该字符串“以文本形式表示”此 反对结果应该是简洁但信息丰富的表示 这对一个人来说很容易阅读。建议所有 子类重写此方法 (强调矿山) 考虑到这一点,我为一个构建类型的类编写了一个toString(),该类本质上是(一些实现已剥离) @覆盖 公共字符串toString(){ Stringbuilder sb=新的Stringbuilder(“”); sb.append(this.getDe

toString()
的API文档说明:

返回对象的字符串表示形式。总的来说 toString方法返回一个字符串,该字符串“以文本形式表示”此 反对结果应该是简洁但信息丰富的表示 这对一个人来说很容易阅读。建议所有 子类重写此方法

(强调矿山)

考虑到这一点,我为一个
构建
类型的类编写了一个
toString()
,该类本质上是(一些实现已剥离)

@覆盖
公共字符串toString(){
Stringbuilder sb=新的Stringbuilder(“”);
sb.append(this.getDesc());
sb.append(“其中包含:
    ”); for(Room r:this.getRooms()){ 某人加上“
  • ”; sb.append(r.getDesc()); 某人追加(“
  • ”); } 某人追加(“
”); 使某人返回字符串(); }
给出类似于:

一套独立的学生公寓,包括:

  • 基础研究
  • 基本生活区
  • 基本浴室
  • 基本的卧室
我认为这是一个“简洁但信息丰富的表达,很容易让人阅读”,但据我理解,它似乎与MVC背道而驰。
Building
Room
类都在模型中,并且这种输出格式肯定属于视图

我不确定我是否想得太多了,Java API是否不是用MVC编写的,或者是否有什么我不明白的地方。演示内容是否可以放入
toString()
?我最好有一个单独的
displayBuilding()
或类似的工具吗?

toString()
在java世界中主要用作调试或在日志中显示数据的工具

出于您提到的目的,很明显,
toString()
绝对不是工具

对于必须在视图中显示的数据,您应该非常明确,这些数据可以一起使用不同的模型,然后从建筑模型中设置值,然后将该模型发送到UI

toString()
在java世界中主要用作调试或在日志中显示数据的工具

出于您提到的目的,很明显,
toString()
绝对不是工具


对于必须在视图中显示的数据,您应该非常明确,这些数据可以一起使用不同的模型,然后从建筑模型中设置值,然后将该模型发送到UI

您正在使用
toString()
为视图生成HTML代码。这不是
toString()
方法的预期用途。我认为,它主要用于生成调试信息,例如用于日志文件或调试器。这意味着“易于阅读”。HTML是包含在网页中的一种更具技术性的表示。这种方法的名称更像是
render()

您正在使用
toString()
为视图生成HTML代码。这不是
toString()
方法的预期用途。我认为,它主要用于生成调试信息,例如用于日志文件或调试器。这意味着“易于阅读”。HTML是包含在网页中的一种更具技术性的表示。这种方法的名称更像是
render()

IMHO
Object::toString
在日志和调试中非常有用,因此,我将使用纯文本来呈现其输出

我的建议是:

  • 使用诸如and method
    ReflectionStringBuilder::toString
    之类的库快速获得纯文本输出
  • 使用一个方法创建一个功能接口(例如
    HtmlRepresentable
    ),方法
    toHtmlString
    在您想要有HTML对象表示的类中实现该方法

    public interface HtmlRepresentable {
        String toHtmlString();
    }
    
    然后

    公共建筑实现HtmlRepresentable{
    @凌驾
    公共字符串toString(){
    StringBuilder sb=新的StringBuilder(“”);
    sb.append(this.getDesc());
    sb.append(“其中包含:
      ”); for(Room r:this.getRooms()){ sb.追加(“
    • ”+r.getDesc()+”
    • ”); } 某人追加(“
    ”); 使某人返回字符串(); }

IMHO
Object::toString
在日志和调试中非常有用,因此,我将使用纯文本呈现其输出

我的建议是:

  • 使用诸如and method
    ReflectionStringBuilder::toString
    之类的库快速获得纯文本输出
  • 使用一个方法创建一个功能接口(例如
    HtmlRepresentable
    ),方法
    toHtmlString
    在您想要有HTML对象表示的类中实现该方法

    public interface HtmlRepresentable {
        String toHtmlString();
    }
    
    然后

    公共建筑实现HtmlRepresentable{
    @凌驾
    公共字符串toString(){
    StringBuilder sb=新的StringBuilder(“”);
    sb.append(this.getDesc());
    sb.append(“其中包含:
      ”); for(Room r:this.getRooms()){ sb.追加(“
    • ”+r.getDesc()+”
    • ”); } 某人追加(“
    ”); 使某人返回字符串(); }

理论上,您还可以使用typeclass并为
Show
typeclass提供实现。理论上,您还可以使用typeclass并为
Show
typeclass提供实现
public Building implements HtmlRepresentable {

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("<p>");
        sb.append (this.getDesc());
        sb.append ("which contains: <br> <ul>"); 
        for (Room r: this.getRooms()) {
            sb.append("<li>" + r.getDesc() + "</li>");
        }
        sb.append("</ul>");
        return sb.toString(); 
}