为什么我的LinkedHashSet在toString()方法中为空?

Lis*_*a S 3 java tostring

我有一个简单的类扩展LinkedHashSet,我试图覆盖该toString()方法.我Set在main方法中添加了一些元素,但是在我的toString方法中,它Set是空的.代码:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

返回以下内容:

这个MyHashSet是空的.

我期待着toString()回来

[A,B,C,D,E]

我究竟做错了什么?提前致谢.

dav*_*xxx 5

toString()方法依赖于myHashSet您声明的字段,但不添加元素.

的确,在这里:

     MyHashSet <String> myHashSet = new MyHashSet<>();

     myHashSet.add("A");
     myHashSet.add("B");
     myHashSet.add("C");
     myHashSet.add("D");
     myHashSet.add("E");
Run Code Online (Sandbox Code Playgroud)

您可以依赖于LinkedHashSet类继承的实现来添加元素.它当然不会使用你的领域.

事实上,myHashSet如果你扩展,你甚至不需要声明LinkedHashSet.
所以只需要改变toString()依赖于你继承的类的方法:

@Override
public String toString(){
     if (isEmpty())
        return "This MyHashSet is empty.";
     else
        return super.toString();
}
Run Code Online (Sandbox Code Playgroud)

否则你也可以依靠myHashSet字段来使用组合,但是你不应该扩展 LinkedHashSet而是实现Set<E>.

无论如何,使用继承或组合.
但不是两个在同一时间.