如何在不同实现/类/etc的java中调用toString()
我有一个类似的课程:如何在不同实现/类/etc的java中调用toString(),java,inheritance,interface,tostring,Java,Inheritance,Interface,Tostring,我有一个类似的课程: class MyClass implements Iterable<Set<String>> { @Override public Iterator<Set<String>> iterator() { //Lots of code here } @Override public String toString() { return ImmutableList.copyOf(this).to
class MyClass implements Iterable<Set<String>> {
@Override
public Iterator<Set<String>> iterator() {
//Lots of code here
}
@Override
public String toString() {
return ImmutableList.copyOf(this).toString();
}
}
类MyClass实现了Iterable{
@凌驾
公共迭代器迭代器(){
//这里有很多代码
}
@凌驾
公共字符串toString(){
返回ImmutableList.copyOf(this.toString();
}
}
它正确地实现了Iterable
。对于toString()
,我希望将其显示为一个列表。到目前为止,我的解决方案如上所述。有没有更好的方法,或者这是正确的方法?私有成员变量是输出迭代器的状态的一部分,但是没有一个成员可以调用toString()
来获得我想要的。您所做的至少不是“错误的”。列表是显式构造的,这可以用一个小的实用方法来避免,但是很少有这样的情况真正重要
class IteratorToString
{
public static <T> String toString(Iterator<T> iterator)
{
if (!iterator.hasNext())
{
return "[]";
}
StringBuilder sb = new StringBuilder();
sb.append('[');
while (true)
{
T t = iterator.next();
sb.append(t);
if (!iterator.hasNext())
{
return sb.append(']').toString();
}
sb.append(',').append(' ');
}
}
}
类迭代器排序
{
公共静态字符串toString(迭代器迭代器)
{
如果(!iterator.hasNext())
{
返回“[]”;
}
StringBuilder sb=新的StringBuilder();
某人附加(“[”);
while(true)
{
T=迭代器.next();
某人附加(t);
如果(!iterator.hasNext())
{
返回sb.append(']').toString();
}
某人附加(‘,’)。附加(‘’);
}
}
}
既然您已经在使用番石榴,请尝试以下方法:
StringBuilder sb = new StringBuilder("[");
Joiner.on(",").appendTo(this, sb);
return sb.append("]").toString();
它的功能与您的通话基本相同,但无需复制。如果您已经在使用番石榴,可以在一行中惰性地完成
return Iterables.toString(this);
…而不制作不必要的副本。就是这样!既然我们有了java8,也许toString可以成为Iterable中的默认方法?