将链接列表toString转换为Generic

时间:2014-01-09 04:27:56

标签: java linked-list generic-collections

我正在编写一个带有名称或数字的Linked List类,然后将它们打印出来。我设法正常写了清单。这是我做的:

public String toString(){
    return list.toString; //where list is the LinkedList I am calling
}

这样可以正常工作,并在添加4个这样的元素后返回我的列表:

[Joe, Jessica, Max, 5]

现在我试图将同样的方法转换为通用方法,所以我做了两件事。

这里我创建了集合对象:

private Collection<E> collection;

public MyLinkedListG(Collection<E> _collection) {
    collection= _collection;
}

以下是我在集合中编写新的toString的方法:

 public String toString(){
    StringBuilder builder = new StringBuilder();
    for(E e : collection) {
        builder.append(e); //appends each string
    }
    return builder.toString();
}

问题是现在我的测试类不允许我调用之前创建的LinkedList对象:

 MyLinkedListG x = new MyLinkedListG();

它声明我需要在参数内输入一个集合。我现在怎么称呼它?或者我完全错了吗?

如果不清楚,请告诉我,以便我尽快澄清。谢谢你提前。

2 个答案:

答案 0 :(得分:0)

如果

,您只能使用空构造函数

A)您尚未定义构造函数

B)如果您已明确定义了一个空构造函数。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.9

答案 1 :(得分:0)

据我所知,您的原始类可能没有包含构造函数。这意味着默认情况下提供了无参数构造函数new MyLinkedListG(),这可能是您用来构造类实例的。

修改完成后,您添加了一个构造函数MyLinkedListG(Collection<E> _collection)。现在,默认情况下不再提供无参数构造函数。如果要继续使用它,必须明确定义它。

在这种情况下,你的类可能有两个(或更多)构造函数,可能是这样的:

private Collection<E> collection;

public MyLinkedListG(Collection<E> _collection) {
    collection= _collection;
}

public MyLinkedListG() {
    collection=new LinkedList<E>();
}

现在您可以为对象使用任一构造函数。