Java 必须使用Main类型的封闭实例限定分配(例如x.new A(),其中x是Main的实例)
如何修复以下错误?我需要快速的帮助 线程“main”java.lang中出现异常。错误:未解析编译 问题: 无法访问Main类型的封闭实例。必须使用Main类型的封闭实例限定分配(例如x.new A() 其中x是Main的一个实例) 位于com.common.Main.Main(Main.java:16) 这是我的代码供参考。如果我们解决了这个问题,那么Java 必须使用Main类型的封闭实例限定分配(例如x.new A(),其中x是Main的实例),java,Java,如何修复以下错误?我需要快速的帮助 线程“main”java.lang中出现异常。错误:未解析编译 问题: 无法访问Main类型的封闭实例。必须使用Main类型的封闭实例限定分配(例如x.new A() 其中x是Main的一个实例) 位于com.common.Main.Main(Main.java:16) 这是我的代码供参考。如果我们解决了这个问题,那么“John”应该只打印一次,而不是两次我们如何限制“John”只打印一次 public class Main { public stat
“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;
}
}
}
公共类主{
公共静态void main(字符串[]args){
Set l=新的HashSet();
l、 添加(新人员(“约翰”);
l、 添加(新人员(“约翰”);
l、 添加(新人员(“马特”);
l、 添加(新人员(“Deepak”);
l、 添加(新人员(“克里斯”);
for(迭代器迭代器=l.Iterator();迭代器.hasNext();){
Person=(Person)迭代器.next();
System.out.println(person.getName());
}
}
公共阶层人士{
私有字符串名称;
公众人物(字符串名称){
超级();
这个.setName(name);
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
}
}
由于您的Person
类看起来不应该是内部类(即,它看起来不需要封闭的Main
类的关联实例),因此将其设置为静态(即Main
类的嵌套类,不需要封闭实例):
或者将其移到您的Main
类之外
编辑:
至于第二个问题,在Person
类中重写equals
和hashCode
,以便让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();
}
由于您的
Person
类看起来不应该是内部类(即,它看起来不需要封闭的Main
类的关联实例),因此将其设置为静态(即Main
类的嵌套类,不需要封闭实例):
或者将其移到您的Main
类之外
编辑:
至于第二个问题,在Person
类中重写equals
和hashCode
,以便让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();
}
Person
是Main
的内部类,因为它不是静态的Main
无法访问它。Person
是Main
的内部类,因为它不是静态的Main
无法访问它。谢谢。虽然我使用set,但为什么John要打印两次?我只想打印一次。我该换什么。目前我得到的输出是Chris John MattDeepak@user4567570那是另一个问题。为了使您的HashSet
按您的意愿运行,您必须在Person
类中重写equals
和hashCode
,以便具有相同名称的两个Person
实例将彼此相等并具有相同的hashCode
。谢谢。虽然我使用set,但为什么John要打印两次?我只想打印一次。我该换什么。目前我得到的输出是Chris John MattDeepak@user4567570那是另一个问题。为了使HashSet
按您的意愿运行,您必须在Person
类中重写equals
和hashCode
,以便具有相同名称的两个Person
实例将彼此相等,并且具有相同的hashCode
。可能重复的