Java 为什么我的LinkedHashSet在toString()方法中为空?
我有一个扩展Java 为什么我的LinkedHashSet在toString()方法中为空?,java,tostring,Java,Tostring,我有一个扩展LinkedHashSet的简单类,我正在尝试重写toString()方法。我在main方法中向集合添加了一些元素,但是在我的toString方法中,集合是空的。守则: import java.util.*; import java.util.*; public class MyHashSet<T> extends LinkedHashSet<T>{ private Set <T> myHashSet; public MyHa
LinkedHashSet
的简单类,我正在尝试重写toString()
方法。我在main方法中向集合
添加了一些元素,但是在我的toString
方法中,集合
是空的。守则:
import java.util.*;
import java.util.*;
public class MyHashSet<T> extends LinkedHashSet<T>{
private Set <T> myHashSet;
public MyHashSet (){
myHashSet = new HashSet<T>(5);
}
@Override
public String toString(){
if (myHashSet.isEmpty())
return "This MyHashSet is empty.";
else
return myHashSet.toString();
}
public static void main (String[] args){
MyHashSet <String> myHashSet = new MyHashSet<>();
myHashSet.add("A");
myHashSet.add("B");
myHashSet.add("C");
myHashSet.add("D");
myHashSet.add("E");
System.out.println(myHashSet);
System.out.println(myHashSet.isEmpty());
}
}
import java.util.*;
导入java.util.*;
公共类MyHashSet扩展LinkedHashSet{
私有集myHashSet;
公共MyHashSet(){
myHashSet=新的HashSet(5);
}
@凌驾
公共字符串toString(){
if(myHashSet.isEmpty())
return“此MyHashSet为空。”;
其他的
返回myHashSet.toString();
}
公共静态void main(字符串[]args){
MyHashSet MyHashSet=新的MyHashSet();
myHashSet.add(“A”);
myHashSet.add(“B”);
添加(“C”);
myHashSet.add(“D”);
myHashSet.add(“E”);
System.out.println(myHashSet);
System.out.println(myHashSet.isEmpty());
}
}
返回以下内容:
此MyHashSet为空。
假的
我希望
toString()
返回
[A、B、C、D、E]
我做错了什么?提前感谢。很简单:因为您没有向类中的内部映射添加任何元素 这是:
myHashSet.add("A");
将元素添加到类继承的“set”结构中
为了使用该内部集合,您还必须@Override各种add()
方法
但是请注意:您应该使用组合(使用内部myHashSet
字段)或者继承(那么您一开始就不需要这样的字段)
您正在组合两个不应该以这种方式组合的概念
除此之外,还有两件事叫做myHashSet
——这相当令人困惑。避免以这种方式重复使用名称 方法依赖于您正在声明的myHashSet
字段,但不添加元素。事实上,这里:
MyHashSet <String> myHashSet = new MyHashSet<>();
myHashSet.add("A");
myHashSet.add("B");
myHashSet.add("C");
myHashSet.add("D");
myHashSet.add("E");
否则,您也可以通过依赖myHashSet
字段来使用组合,但是您不应该扩展LinkedHashSet
,而是应该实现Set
无论如何,使用继承或组合。
但不能同时使用这两种方法。
提示:您的代码中有两个东西叫做
myHashSet
。在调试器中使用五分钟,这个问题(以及随后的否决票)就没有必要了:)myHashSet.myHashSet.add(“a”):以这种格式添加数据。@除非您真正开始描述这些内容,否则像这样的口头评论是没有帮助的。这个问题是善意地提出的,你们应该会的。你们得到了我的投票——仅仅是因为你们提出了一个包括预期和实际产出在内的完整结果。现在就享受投票的乐趣吧:-)
@Override
public String toString(){
if (isEmpty())
return "This MyHashSet is empty.";
else
return super.toString();
}