如何调用Anonymous class的多个方法?

How to call multiple methods of Anonymous class?

在下面的代码块中,我通过扩展 LinkedList 创建了一个匿名 class,但不知道如何在匿名 class 之外调用多个方法。我可以调用一种方法,但正如 .dummy1()

最后提到的那样
void methodOC_3() {

    int x = 0;
    new LinkedList() {
        /**
         * 
         */
        private static final long serialVersionUID = -2091001803840835817L;

        // Anonymous class is extending class LinkedList
        public void dummy1() {
            //x=4; Will give error, Or declare x as final variable
            //you can read it As Of Now, since it is effectively final.
            System.out.println(x);
        }

        @SuppressWarnings("unused")
        public void dummy2() {
            dummy1();
            System.out.println("Hey there :) ");
        }
    }.dummy1(); 
}

我刚刚开始探索匿名 类 和内部 类。如果我遗漏了什么,请告诉我。

你不能。

能够调用多个方法的唯一方法是将匿名 class 实例分配给某个变量。

但是,在您的 LinkedList 子 class 示例中,您只能将匿名 class 实例分配给 LinkedList 变量,这将只允许您调用LinkedList class.

的方法

如果您的匿名 class 实例实现了一些具有 dummy1()dummy2() 方法的接口,您可以将该实例分配给该接口类型的变量,这将允许您同时调用 dummy1()dummy2().

调用匿名 class 方法的唯一方法是使用引用变量的反射 'linkedList'

LinkedList linkedList = new LinkedList() { ... }

linkedList.getClass().getMethod("dummy1").invoke();

您为什么要 class 匿名?如果它是匿名的,你就不能引用它,这正是你的问题。所以,只是不要让它匿名!您可以在方法中定义 local classes:

public static void methodOC_3() {

    int x = 0;
    class MyList<X> extends java.util.LinkedList<X> {
        /**
         * 
         */
        private static final long serialVersionUID = -2091001803840835817L;

        public void dummy1() {
            //x=4; Will give error, Or declare x as final variable
            //you can read it As Of Now, since it is effectively final.
            System.out.println(x);
        }

        public void dummy2() {
            dummy1();
            System.out.println("Hey there :) ");
        }
    }

    MyList<String> a = new MyList<String>();
    a.dummy1();
    a.dummy2();
}

这非常有用,特别是如果你想在另一个方法中定义多个相互递归的辅助方法,而不污染名称 space。