我有一个简单的类扩展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]
我究竟做错了什么?提前致谢.
该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>.
无论如何,使用继承或组合.
但不是两个在同一时间.