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() にあります。基本的には、Iterator に Klant オブジェクトが含まれるように指定していますが、<Klant> ローカルオブジェクトでは 、オブジェクトはまだインスタンスであり、次のようにキャストしても、で 定義されたメソッドkが提供されません。getKlantNummer()KlantkObject

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

うまくいきません。ダウンキャスティングは危険ですが、私が覚えている限りでは禁止されていません。

何かアドバイス?

4

1 に答える 1

9

クラス定義では、

public class MySet<Klant> {

これKlantは、クラスの型パラメーターとして解釈されます ( Eis forCollectionまたはKおよびVare forと同様Map)。Klantその後 内で使用すると、実際のクラスがオーバーライドされます。MySetその消去はObject(上限を指定しなかったため) であるためKlant、クラス内の型の変数にはのメソッドMySetのみが表示されます。Object型パラメータを削除して使用

public class MySet {

そしてあなたは良いはずです。

于 2011-06-04T05:49:54.093 に答える