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();
}