1

我正在尝试查看 HashSet 是否会成为我下一个项目的解决方案,因此我正在做一些非常简单的测试来检查功能。我有一个简单的课程Klant

public class Klant {
    private int klantNummer;

    public Klant(int nummer) {
        this.klantNummer = nummer;
    }

    public int getKlantNummer() {
        return this.klantNummer;
    }
}

并且具有通过组合的类使用HashSet

public class MySet<Klant> { 
    private Collection<Klant> mySet = null;

    public MySet() {
        mySet=new HashSet<Klant>();
    }

    public void add(Klant elem) {
        mySet.add(elem);
    }

    public void toon() {
        Iterator<Klant> i = mySet.iterator();   
        while(i.hasNext()) {
            Klant k = i.next();
            System.out.println(k.);
        }
    }
}

问题出在方法中toon() 基本上即使我指定迭代器将包含 Klant 对象<Klant> 本地k对象也没有为我提供对象中getKlantNummer()定义的方法,Klantk仍然是一个Object实例,甚至通过强制转换:

Object k = (Klant)i.next();

它行不通。向下铸造是危险的,但据我所知,它并没有被禁止。

有什么建议吗?

4

1 回答 1

9

在你的类定义中,你有

public class MySet<Klant> {

Klant被解释为您的类的类型参数(就像Eis forCollectionKand Vare for一样Map)。Klant当您随后在 中使用它时,它会覆盖您的实际类MySet,并且由于它的擦除是Object(因为您没有指定上限)Klant您的MySet类中的类型变量只会看到Object的方法。去掉类型参数并使用

public class MySet {

你应该很好。

于 2011-06-04T05:49:54.093 回答