微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HashSet的迭代器有问题

如何解决HashSet的迭代器有问题

| 我试图查看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
对象没有为我提供
Klant
中定义的
getKlantNummer()
方法
k
对象仍然是
Object
实例,甚至通过以下方式将其强制转换为:
Object k = (Klant)i.next();
它不会工作。 下投是危险的,但据我所知,这是不被禁止的。 有什么建议吗?     

解决方法

        在您的班级定义中,
public class MySet<Klant> {
ѭ0被解释为您的类的类型参数(就像
E
代表
Collection
K
V
代表
Map
一样)。当您随后在
MySet
中使用它时,它将覆盖您的实际类
Klant
,并且由于其擦除为
Object
(如您未指定上限),因此您在
MySet
类中的类型为
Klant
的变量将仅查看
Object
的方法。删除类型参数并使用
public class MySet {
你应该很好     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。