java,有没有办法在我的输出中显示arraylist中对象的名称

35g0bw71  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(413)

我正在开发一个应用程序,可以根据形状的面积进行比较。它正常工作,我只是想让输出更好。
我有一个形状超类和两个形状子类矩形和圆形。它们都有tostring()方法输出区域。

@Override
    public String toString() {
        return " has an area of : " + getArea();
    }

我做了两个圆,叫做圆1和圆2。类似于矩形。将它们存储在名为shapeslist的arraylist中,我使用以下代码遍历数组并输出tostring()。

for (Shapes s:shapesList) {
                System.out.println(s.toString());
            }

有没有一种方法可以让我的输出打印“矩形1有一个区域圆1有一个区域等。在过去,我在我的对象中设置了名称,这样我就可以在循环中使用s.getname()。但是我想知道有没有其他方法可以在我的输出中获得对象名
我希望我已经解释清楚这一点,第一次张贴!

50few1ms

50few1ms1#

this.getClass().getSimpleName(); 结合 this.hashCode(); 如果你不介意哈希代码的长度的话,这可能就是你想要的 getSimpleName(); 返回源代码中给定的基础类的简单名称。如果基础类是匿名的,则返回空字符串。 hashCode(); 只要是合理可行的,由类定义的hashcode方法 Object 为不同的对象返回不同的整数(这通常是通过将对象的内部地址转换为整数来实现的,但是
您的tostring()将如下所示

@Override
public String toString() {
    return this.getClass().getSimpleName() + " " + this.hashCode() + " has an area of : " + getArea();
}
whhtz7ly

whhtz7ly2#

如果不需要打印每个对象的唯一名称,可以实现 Rectangle#toString 具体如下:

@Override
public String toString() {
    return "Rectangle has an area of : " + getArea();
}

类似地,您可以实现 Circle#toString 具体如下:

@Override
public String toString() {
    return "Circle has an area of : " + getArea();
}

但是,更好的方法是使用一个变量, name 在你的课堂上,然后你可以做它作为

@Override
public String toString() {
    return name + " has an area of : " + getArea();
}

这将确保每个对象都打印有其唯一的名称。
另外,请注意,您不需要打电话 toString 显式内部 System.out.println . 这个 System.out.println 电话 toString 含蓄地,也就是说,你只需要写 System.out.println(s) 哪里 s 是如下所示的对象:

for (Shapes s:shapesList) {
    System.out.println(s);
}

事实上,这就是推翻 toString 功能。

ss2ws0br

ss2ws0br3#

您可以添加 public/protected abstract String getShapeName() 方法来塑造类并在中提供实现 Rectangle 以及 Circle 班级。然后你就可以在 Shape.toString()

mrzz3bfm

mrzz3bfm4#

你不能这么做。对象不包含变量名,这意味着您不能只打印变量名,而是打印:

Shapes rectangle = new Rectangle();
// the object Rectangle doesn't know the variable name - rectangle

另一方面,您可以创建一个名为 name 把它设置好,这样你就知道你在叫哪一个:

class Shapes {
    protected String name;

    public void setName(String name) {
        this.name = name
    }

    public String getName() {
        return this.name;
    }
}

然后在 Rectangle 或者 Circle 上课,甚至在教室里 Shapes 类,可以创建 toString 方法:

@Override
    public String toString() {
        return getName() + " has an area of : " + getArea();
    }

相关问题