【发布时间】:2014-02-19 03:29:30
【问题描述】:
我收到 ClassCastException 错误。当我插入从我创建的类派生的对象时会发生此错误。 我的代码如下: 当我运行时,我总是收到 ClassCastException 错误。 此外,我的类的比较器在调试器中显示为 null。
我已经编写了一个比较器(据我所知)并重写了必要的方法。
如何将 Set 与我创建的类一起使用并使用 contains() 方法?
public class Person implements Comparable<Person>
{
int age;
double height;
public Person(int age, double height)
{
this.age = age;
this.height = height;
}
@Override
public int compareTo(Person person)
{
return age - person.age;
}
public boolean equals(Object obj)
{
final Person other = (Person) obj;
if (this.age == other.age)
return true;
return false;
}
public static void main(String[] args)
{
Set<Person> people = new HashSet<>();
Person p1 = new Person(10, 1.00);
Person p2 = new Person(11, 1.10);
Person p3 = new Person(12, 1.20);
Person p4 = new Person(14, 1.40);
people.add(p1);
people.add(p2);
people.add(p3);
people.add(p4);
if(people.contains(12))
System.out.println("contains");
else
System.out.println("does not contain");
}
}
我已经设法摆脱了这个错误。但是现在,输出是“不包含”。
【问题讨论】:
-
你应该改变那个
equals的实现,否则你会很糟糕...... -
您究竟从哪里得到
ClassCastException?错误信息是什么? -
当我尝试调用包含“相邻”对象的列表的 contains() 方法时,出现 ClassCastException。
-
问题和原来写的完全不一样。我觉得
people.contains(12)应该改成people.contains(p3)。 -
你完全改变了问题的性质。您应该发布另一个(这不是一个坏问题)。长话短说,您不能在
HashSet<Person>上致电contains(int)。您确实需要将其包装在Person中。包含将仅检查身份字段,因此“1.20”无关紧要。身份字段是您用于equals和hashcode的字段。
标签: java classcastexception comparator compareto