对象类型中的方法toString()不适用于参数(Collection <describe>)

时间:2018-11-10 15:12:25

标签: java

我是Java的新手,我正在尝试编写一个描述类,该类将通过我的接口调用describe来返回字符串数组。

此行:return Collections.toString(items);在标题中引发错误,我不明白为什么。

我知道我需要返回类型字符串,并且该项目当前不是字符串,但是我是Java新手,不确定要更改什么。

运行时跟踪错误:java.lang.Error:未解决的编译问题:     返回类型与Describe.describe()

不兼容
package uk.ac.uos.assignment;

import java.util.*;  

public class Description implements Describe {
    private Collection<Describe> items;

    public Description() {
        this.items = new ArrayList<>();
    }

    public String describe() {
        return Collections.toString(items);
    }

    public void add(Describe d) {
        items.add(d);       
    }
}

这是我的界面:

package uk.ac.uos.assignment;

interface Describe {

    String describe();
}

2 个答案:

答案 0 :(得分:0)

我了解的是,您想要一个String数组,返回String中每个 item Collection<Describe> items表示形式。

遍历集合并调用每个toString()项目的Describe方法,前提是Describe类具有自己的toString实现。

这将为您的集合中的每个项目提供一个字符串,收集它们并最后返回。

public String describe() {
    List<String> descriptions = new ArrayList<String>(items.size());
    for(Describe item: items) {
        descriptions.add(item.toString());
    }
    return descriptions.toArray(new String[items.size()]);
}

答案 1 :(得分:0)

现在,在“ describe()”方法中,建议您执行以下操作:

1)创建一个空字符串;

2)遍历Collection,并将每个元素作为字符串添加到您创建的空字符串中;

3)返回字符串。

我上面描述的基本算法,现在有点实现了:

public String describe(){

    StringBuilder y = new StringBuilder();
    items.forEach(i -> y.append(i.toString()));

    return y.toString();

}

注意:要使其正常工作,必须将您的项目设置为使用Java 8或更高版本。如果不是,则需要对Collection进行经典迭代,然后将每个元素附加到StringBuilder。

注2:您的“描述”类必须实现其“ toString()”方法。不过,在实现它之前,应该在方法上方使用@Override批注:

@Override
public String toString(){...}