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

时间:2018-01-21 15:04:57

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

在下面的代码块中,我通过扩展class来创建匿名LinkedList,但我不知道如何在匿名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(); 
}

我刚开始探索匿名类和内部类。如果我遗漏了任何东西,请告诉我。

3 个答案:

答案 0 :(得分:4)

你不能。

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

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

如果您的匿名类实例实现了一些具有dummy1()dummy2()方法的接口,您可以将该实例分配给该接口类型的变量,这样您就可以同时调用{{1} }和dummy1()

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

为什么你要让你的班级匿名?如果它是匿名的,你就无法引用它,这正是你的问题所在。所以,不要让它匿名!您可以在方法中定义本地类:

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();
}

这非常有用,尤其是如果要在另一个方法中定义多个相互递归的辅助方法,而不会污染名称空间。