简体   繁体   English

java.util.LinkedList的toString()方法的位置

[英]Location of toString() Method of java.util.LinkedList

I am studying LinkedLists and wanted to check Java's implementation.我正在研究 LinkedLists 并想检查 Java 的实现。

However, I have some questions.但是,我有一些问题。

I saw that I can print the contents of java.util.LinkedList.我看到我可以打印 java.util.LinkedList 的内容。

Like this:像这样:

LinkedList ll = new LinkedList<Integer>();

ll.add(1);
ll.add(2);

System.out.println(ll);

// prints "[1, 2]"

However, I can't find the toString() method of LinkedList.但是,我找不到LinkedList 的toString() 方法。

How does Java do that? Java 是怎么做到的? How can it trigger the toString() method of every data type it has?它如何触发它拥有的每种数据类型的 toString() 方法?

The JavaDoc tells you which method is implement in whch parent class, for example the ones in AbstractCollection JavaDoc 告诉你哪个方法在哪个父 class 中实现,例如AbstractCollection中的那些

Methods declared in class java.util.AbstractCollection
containsAll, isEmpty, removeAll, retainAll, toString

The way is LinkedList > AbstractSequentialList > AbstractList > AbstractCollection方式是LinkedList > AbstractSequentialList > AbstractList > AbstractCollection

public class LinkedList<E> extends AbstractSequentialList<E> 
                           implements List<E>, Deque<E>, Cloneable, java.io.Serializable

>> public abstract class AbstractSequentialList<E> extends AbstractList<E> {

>>> public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {

You ends up with AbstractCollection.toString that iterates over each item to call their toString and join them with a comma, the whole enclosed in brackets您最终得到AbstractCollection.toString迭代每个项目以调用它们的 toString 并用逗号连接它们,整个包含在括号中

public String toString() {
    Iterator<E> it = iterator();
    if (! it.hasNext())
        return "[]";

    StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
        E e = it.next();
        sb.append(e == this ? "(this Collection)" : e);
        if (! it.hasNext())
            return sb.append(']').toString();
        sb.append(',').append(' ');
    }
}

LinkedList inherits its implementation of toString() from java.util.AbstractCollection , which simply calls toString on the objects in the collection. LinkedListjava.util.AbstractCollection继承了toString()的实现,它只是对集合中的对象调用toString (All objects have it from Object , so it can just call it.) (所有对象都从Object ,所以它可以调用它。)

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

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