【问题标题】:Must qualify the allocation with an enclosing instance of type Main (e.g. x.new A() where x is an instance of Main)必须使用 Main 类型的封闭实例限定分配(例如 x.new A(),其中 x 是 Main 的实例)
【发布时间】:2015-11-21 08:14:14
【问题描述】:

如何解决以下错误?我需要快速帮助。

线程“主”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;
        }
    }
}

【问题讨论】:

标签: java


【解决方案1】:

由于您的 Person 类看起来不应该是内部类(即,它看起来不需要封闭 Main 类的关联实例),因此将其设为静态(即嵌套类Main 类,不需要封闭实例):

public static class Person { ...

或将其移到您的 Main 班级之外。

编辑:

至于您的第二个问题,在您的 Person 类中覆盖 equalshashCode,以便让 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();
}

【讨论】:

  • 谢谢。虽然我使用 set 但仍然为什么约翰要打印两次?我只想打印一次。我应该改变什么。目前我得到的输出 Chris John John Matt Deepak
  • @user4567570 这是一个不同的问题。为了使您的HashSet 能够按您的意愿运行,您必须在您的Person 类中覆盖equalshashCode,以便两个具有相同名称的Person 实例将彼此相等并且具有相同的hashCode
【解决方案2】:

PersonMain 的内部类,由于它不是静态的,main 无法访问它。

【讨论】:

    猜你喜欢
    • 2018-05-12
    • 1970-01-01
    • 2012-03-24
    • 2011-02-22
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多