如何解决以下错误?我需要快速帮助。
线程中的异常" main" java.lang.Error:未解析的编译 问题: 不能访问类型为Main的封闭实例。必须使用Main类型的封闭实例限定分配(例如x.new A() 其中x是Main的实例。
在com.common.Main.main(Main.java:16)
这是我的代码供参考。如果我们解决了这个问题,那么"John"
应该只打印一次而不是两次。 我们如何限制"John"
打印一次
public class Main {
public static void main(String[] args) {
Set<Person> l = new HashSet<Person>();
l.add(new Person("John"));
l.add(new Person("John"));
l.add(new Person("Matt"));
l.add(new Person("Deepak"));
l.add(new Person("Chris"));
for (Iterator iterator = l.iterator(); iterator.hasNext();) {
Person person = (Person) iterator.next();
System.out.println(person.getName());
}
}
public class Person{
private String name;
public Person(String name) {
super();
this.setName(name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
答案 0 :(得分:3)
由于你的Person
类看起来不应该是一个内部类(即它看起来不像需要一个封闭的Main
类的关联实例),所以将它设为静态(即Main
类的嵌套类,不需要封闭实例):
public static class Person { ...
或将其移至Main
课程之外。
编辑:
关于您的第二个问题,请覆盖equals
课程中的hashCode
和Person
,以便让HashSet
知道两个对象何时应该被视为相同:
public boolean equals (Object other) {
if (!(other instanceof Person))
return false;
Person op = (Person) other;
return this.name.equals(op.name);
}
public int hashCode () {
return name.hashCode();
}
答案 1 :(得分:1)
Person
是Main
的内部类,因为它不是静态的main
无法访问它。