我是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();
}
答案 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(){...}