代码如下:
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; } 
} 这段代码运行时为什么会出现错误?在线等

解决方案 »

  1.   


    public class Group extends HashSet <Person> { //去掉<Person>试试
      

  2.   

    public boolean add(Person o) {
          System.out.println("Adding: " + o) ;
          return super.add(o);
    }
      

  3.   

    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) {//参数有问题,应该是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类型的参数
      

  4.   

    解决方法一:HashSet <Person> 改成 HashSet<Object>或者HashSet 
    解决方法二:add(Object o)    改成  add(Person o) 
    HashSet <Person>这句话的意思就是你只能在HashSet中方Person类型的对象(更确切说是引用)
    建议使用第二个解决方法。