[英]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.