代码如下:
import java.util.*;
public class Group extends HashSet<Person> {
public static void main(String[] args) {
Group g = new Group () ;
g.add(new Person("Hans"));
g.add(new Person("Lotte")); g.add(new Person("Jane"));
g.add(new Person("Hans"));
g.add(new Person("Jane"));
System.out.println("Total: " + g.size() );
}
public boolean add(Object o) {
System.out.println("Adding: " + o) ;
return super.add(o);
}
}
class Person {
private final String name;
public Person(String name) { this.name = name; }
public String toString() { return name; }
} 这段代码运行时为什么会出现错误?在线等
import java.util.*;
public class Group extends HashSet<Person> {
public static void main(String[] args) {
Group g = new Group () ;
g.add(new Person("Hans"));
g.add(new Person("Lotte")); g.add(new Person("Jane"));
g.add(new Person("Hans"));
g.add(new Person("Jane"));
System.out.println("Total: " + g.size() );
}
public boolean add(Object o) {
System.out.println("Adding: " + o) ;
return super.add(o);
}
}
class Person {
private final String name;
public Person(String name) { this.name = name; }
public String toString() { return name; }
} 这段代码运行时为什么会出现错误?在线等
public class Group extends HashSet <Person> { //去掉<Person>试试
System.out.println("Adding: " + o) ;
return super.add(o);
}
public class Group extends HashSet <Person> {
public static void main(String[] args) {
Group g = new Group () ;
g.add(new Person("Hans"));
g.add(new Person("Lotte")); g.add(new Person("Jane"));
g.add(new Person("Hans"));
g.add(new Person("Jane"));
System.out.println("Total: " + g.size() );
}
public boolean add(Object o) {//参数有问题,应该是Person类型的参数
System.out.println("Adding: " + o) ;
return super.add(o);
}
}
class Person {
private final String name;
public Person(String name) { this.name = name; }
public String toString() { return name; }
} 参数有问题,应该是Person类型的参数
解决方法二:add(Object o) 改成 add(Person o)
HashSet <Person>这句话的意思就是你只能在HashSet中方Person类型的对象(更确切说是引用)
建议使用第二个解决方法。