【问题标题】:printing several classes with one loop, java用一个循环打印几个类,java
【发布时间】:2014-09-29 15:52:37
【问题描述】:

//考虑代码(*)

    class Whatever {
        Class1 c1 = new Class1[10];
        CLass2 c2 = new Class2[10];
        Class3 c3 = new Class3[10];

    void printArray(Object[] a) {
        for(Object b: a) {
            System.out.println(b);
        }
    }
}

然后当我想打印保存在这些类中的名称时 它们已经在另一个类中初始化,并且设置了 this.name = name 对所有人来说都是独一无二的。 因此,当尝试使用以下方式打印它们时:

例如打印什么

Class1@124124124 // 地址

那么我如何访问传递给方法的类的实际成员?

这真的可能吗?

【问题讨论】:

  • 会员是什么意思?它的方法?

标签: java arrays object printing


【解决方案1】:

我认为您在问题中没有正确使用“类”这个词。通过“然后当我想打印保存在这些类中的名称”时,我将假设您的意思是保存在 Class1、Class2 等的 instances 中的名称...已初始化并存储在给定数组。

似乎您希望您的类共享一些功能。您说您对所有这些都有一个名称字段 - 为什么不通过一个界面指定他们真正可以做到这一点?

public interface Namable{
    public String getName();
}

然后让你所有的类都实现这个接口……

public class Class1 implements Namable{ ... }
public class Class2 implements Namable{ ... }
etc...

然后,您可以更改方法的签名以接收一个可命名数组,您可以在每个数组上调用 getName() 方法。

void printArray(Namable[] a) {
    for(Namable b: a) {
        System.out.println(b.getName());
    }
}

【讨论】:

    【解决方案2】:

    您可以像这样覆盖Class1Class2 等中的toString() 方法:

    @Override
    public String toString() {
    return this.memberX + " " + this.memberY;
    }
    

    这将打印 memberX 和 memberY。 System.out.println(x); 默认调用x.toString();

    【讨论】:

    • 告诉我如何在 Class 对象上覆盖 toString?
    • @ControlAltDel 我看到你编辑了你的评论。但我还是不明白你的问题...
    • 原始海报有他正在打印的 Class 对象数组。打印输出甚至说 Class1@... 您可以在您设计的对象上覆盖 toString,但如果您调用 System.out.print(myObj.getClass());
    • 你错了,仔细阅读问题。 Class1、Class2、Class3有3个数组(Class Class Class
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多