繁体   English   中英

如何创建数组或匿名类对象的集合

[英]How to create array or Collection of anonymous class objects

我需要创建一个数组或匿名类对象的集合。

例如,我的构造函数的toString是:

public String toString() {
    return String.format("%10s%12s%12d", getFirstName(), getLastName(), getAge());
}

我可以创建MyClass对象的列表:

List<MyClass> list = new ArrayList<>();

但是现在我需要使用匿名类覆盖toString方法,并使用新的toString方法创建新的Collection:

MyClass myClass = new MyClass() {
    public String toString() {
        return String.format("%s%12s%12d", getFirstName(), getLastName(), getAge());
    }
};

如何实现呢?

先感谢您。

如前所述,您不能在Java类中更改方法,因此根据您需要执行的操作有几种选择。

您可以创建一个UserWrapper ,它包装一个User ,并覆盖toString() ,所有其他方法调用都委派给它包装的User对象。

您可以修改User类以包括String格式,这将允许您执行类似user.setFormat("%s%12s%12d"); toString()会使用它来显示。

您可以完全从User那里删除格式,因为从设计的角度来看,这实际上并不是它的工作,并且当您需要显示用户的详细信息时,可以在另一个类中完成,例如String str = String.format("%s%12s%12d", user.getFirstName(), user.getLastName(), user.getAge());

最后一个可能是最合理的设计方式,您可以在要显示列表内容的地方执行此操作(也不依赖于列表的默认toString()实现),例如

public void printList() { // Or build the String and return if you don't
    for(User u : myList)  // want to display it here
        System.out.println(format(u));
}
private String format(User u) {
    return String.format(""%s%12s%12d", u.getFirstName(), u.getLastName(), u.getAge());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM