import java.util.*;
class CollectionTest {
public static void main(String args[]){
Collection c = new HashSet();
c.add(new Integer(5));
c.add("whj");
c.add("fjsldk");
c.add(new Double(3));
System.out.println (c);/**
    * 打印c时直接遍历了 调用了c.toString()方法
    *但是怎么实现的呢?
    */
}
}
我就不明白当打印这个c时,应该默认自动调用toString()方法,即c.toString(),可是打印的结果是[3.0,whj,fjsldk,5]这种形式的,但这个toString()方法是在哪里重构的呢?按理说是应该在collection中重写的,但API中怎么找不到呢,如果说继承了Object中的toString(),但也不会显示出了像上面结果中的那种中括号形式的啊?怎么回事呢?

解决方案 »

  1.   

    这个toString方法是继承于AbstractCollection类,你完全可以得到这个String,再自己去处理。
      

  2.   

    是调用的PrintStream的println(Object x)方法啊public void println(Object x) {
    synchronized (this) {
        print(x);
        newLine();
    }
        }
    调用print(Object x)和newLine() public void print(Object obj) {
    write(String.valueOf(obj));
        }
    再调用write(String)
    顺着找应该可以找到吧 
      

  3.   

    啊,1楼说的那个toString()是这样的public String toString() {
    StringBuffer buf = new StringBuffer();
    buf.append("[");        Iterator<E> i = iterator();
            boolean hasNext = i.hasNext();
            while (hasNext) {
                E o = i.next();
                buf.append(o == this ? "(this Collection)" : String.valueOf(o));
                hasNext = i.hasNext();
                if (hasNext)
                    buf.append(", ");
            } buf.append("]");
    return buf.toString();
        }
      

  4.   

    对啊  你跟他解释println的重载方法干啥 呵呵~~
      

  5.   

    你好 刚才我已经结贴了 但我又发现问题了,我仔细查了一下api,你所说的AbstractCollection类也是实现了Collection接口啊,而我所说的像List和Set接口的实现类中比如HashSet中默认调用的toString()方法来源与哪里啊?像List和Set与AbstractCollection类在api中是并列的关系啊?我是初学者还请多多指教。