【问题标题】:How to access anonymous inner class in main method?如何在主方法中访问匿名内部类?
【发布时间】:2018-10-30 02:18:35
【问题描述】:

如何在 main 方法中访问匿名内部类对象。它给出了编译时错误,说“无法对非静态方法进行静态引用”。如果我将匿名内部类设为静态,那么我可以访问我想访问的 ut 而无需将其设为静态。

如何做到这一点。请帮忙。

AnonymousInnerClass2.java

abstract class AnonymousInnerClass21
{
    abstract void m();  
}

public class AnonymousInnerClass2
{
    AnonymousInnerClass21 a=new AnonymousInnerClass21()
    {
        @Override
        void m() {
            System.out.println("Hello");
        }
    };

    public static void main(String[] args)
    {
        a.m();
    }
}

【问题讨论】:

  • 要么将a 声明为static,要么在main 中创建AnonymousInnerClass2 的实例。
  • 或者,将a的声明移到main
  • new AnonymousInnerClass2().a.m(); 或更好地使用吸气剂new AnonymousInnerClass2().getA().m();
  • 您的代码中没有名为 AnonymousInnerClass2 的类,只有 AnonymousInnerClass21*。然后,问题归结为如何从静态方法中访问非静态字段。或者反过来:无法访问匿名类。您创建了该类的**实例,仅此而已。

标签: java inner-classes anonymous-inner-class


【解决方案1】:

这是因为要访问内部类(无论是普通/命名类还是匿名类),您必须创建定义了内部类的类的对象,您可以在下面尝试

abstract class AnonymousInnerClass21
{
    abstract void m();  
}

public class AnonymousInnerClass2
{
    AnonymousInnerClass21 a=new AnonymousInnerClass21()
    {
        @Override
        void m() {
            System.out.println("Hello");
        }
    };

    public static void main(String[] args)
    {
        AnonymousInnerClass2 anonymousInnerClass2=  new AnonymousInnerClass2 ();//create outer class object
        anonymousInnerClass2.a.m(); // access inner class object through outer class object

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多