我已经尝试解决了几个小时,但是找不到有效的答案。
为了完整起见,我在下面发布了整个代码。如果不重写toString方法,则将获得对象哈希码的表示形式。
我尝试使用以下内容:
public String toString(List<?> list) {
String result = " ";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
但是,这似乎无济于事,因为我仍然获得了对哈希码的引用。我知道这是因为我没有正确覆盖toString方法;包含@Override批注时出现错误,但据我所知。
我查看了其他一些回答,这些回答说,在列表/集合的情况下,重写toString方法没有用,但是没有给出其他替代方法的适当指南。
public class WordsContainer {
Collection<String> wordList = new ArrayList<String>();
public void wordGroup1() {
wordList.add("Ant");
wordList.add("Almond");
/// more words
}
public Collection<String> getRandomWords() {
wordGroup1();
LinkedList<String> wordLinkedList = new LinkedList<String>(wordList);
ArrayList<String> subList = new ArrayList<String>();
int i = 0;
while (i < 6) {
int index = (int) Math.random() * 10;
if (!subList.contains(wordLinkedList.get(index))) {
subList.add(wordLinkedList.get(index));
i++;
}
}
return subList;
}
public String toString(List<?> list) {
String result = " ";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
}
public class wordsContainerTest {
public static void main(String[] args) {
wordsContainer list1 = new wordsContainer();
list1.wordGroup1();
System.out.println(list1);
}
}
编辑:
抱歉,我忘了提到我尝试删除Override方法中的参数,如下所示:
public String toString() {
LinkedList<String> list = new LinkedList<>()
String result = " ";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
但是,当我运行代码时,控制台什么也没显示。我意识到这是因为我实例化了一个空列表,但是在这一点上,我不知道该怎么办。
toString()
没有参数。像这样覆盖它(假设您正在扩展List类):
@Override
public String toString() {
String result = " ";
for (int i = 0; i < this.size(); i++) {
result += " " + this.get(i);
}
return result;
}
更新01
好的,看来您真正想要做的是打印WordsContainer封装的列表的内容。
像这样重写WordsContainer的toString:
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(" "); // remove this if you do not want two spaces at the front of the returned string
for (int i = 0; i < this.wordList.size(); i++) {
sb.append(" " + this.wordList.get(i).toString());
}
return sb.toString();
}
请注意,您必须将wordList的声明更改为type List<String>
。
更新02
这将在评论中回答后续问题。
您可以声明一个静态实用程序方法,该方法将为任何给定的字符串列表的内容构建一个字符串表示形式,如下所示:
public static String getStringRepresentation(List<String> list) {
StringBuilder sb = new StringBuilder();
sb.append(" "); // remove this if you do not want two spaces at the front of the returned string
for (int i = 0; i < list.size(); i++) {
sb.append(" " + list.get(i).toString());
}
return sb.toString();
}
像这样使用这种方法:
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("foo");
list.add("bar");
String listStringRepr = WordsContainer.getStringRepresentation(list);
System.out.println(listStringRepr);
}
问题内容: 我想为Java中的ArrayList拥有toString()方法的自己的实现。但是,即使我将这样的toString()添加到包含ArrayList的类中,我也无法正常工作。 当我这样调用ArrayList时,我仍然会获得默认表示形式。我想念什么吗? 问题答案: 你应该做类似的事情 并将列表作为参数传递给。您 可以从 技术上扩展(使用匿名类或具体类)并实现自己,但这在这里似乎是不必要的。
问题内容: 我需要方法方面的帮助,这非常令人讨厌。我尝试在线查找,因为那是一个正在搞砸的地方,即使在那里,它也“找不到2号Kid构造函数”,我什至会做其他事情,但它不起作用。好了,所以这是我的代码: 好的,所以我上面的toString(我知道,我的第三个参数已关闭,应该是String)已关闭。如果我在第三件事中硬编码一个值,它就会变成麻烦,并说找不到它(上面)。那么如何获取日期并将其拆分呢? 调用
问题内容: 这个问题来自一个作业。我必须在创建循环链接列表的类中重写toString()方法,而实际上我的toString()方法效果很好,它通过了我所有的测试。因此,我的项目是自动分级的,显然它不是100%赞成我的方法。所以我的问题是:有没有更好的方法来编写此toString()方法,这样会更有效? 如果我需要详细说明类结构,以便更有意义,请告诉我。 问题答案: 使用StringBuilder。
我这样做对吗?我生成了toString()。
问题内容: 我试图覆盖Java中的方法。我有一堂课,基本上有2个数据字段和。现在,我想重写方法,以便可以在2个对象之间进行检查。 我的代码如下 但是当我写它给我错误时,因为方法只能比较并且是。 Solution 我按照建议使用运算符,问题解决了。 问题答案: Output: `run: – Subash Adhikari - VS - K false – Subash Adhikari - VS
问题内容: 例如,在Java中,注释不仅提供覆盖的编译时检查,而且还提供了出色的自记录代码。 我只是在寻找文档(尽管如果它是指示诸如pylint之类的检查器的指标,那是一个额外的好处)。我可以在某处添加注释或文档字符串,但是在Python中指示替代的惯用方式是什么? 问题答案: 基于此和fwc:s的答案,我创建了一个pip可安装软件包 https://github.com/mkorpela/ove