为什么使用方法局部抽象内部类

2022-09-01 17:21:43

可以与方法局部内部类一起使用的法律修饰符之一是抽象。

例如:

public class Outer {
    public void method(){
        abstract class Inner{
        }
    }
}

有没有你真正使用它的情况?

您必须在SCJP考试中知道这一点。


答案 1

这些是原始问题中的一些无效假设。某些东西是合法/有效的Java并不意味着它是你需要使用或需要知道的东西。

我不记得SCJP包含奇怪的角落案例问题。

我试图想出一个案例,在这个案例中,我会使用一个在方法中声明的抽象类,但一切看起来都非常奇怪,而且设计很糟糕。然而,这是我想出的一个代码示例(恕我直言,仍然是糟糕的代码设计)

public class BatchExecutor {

    public static enum ResultNotification {
        JMS,
        MAIL
    };

    public Runnable createRunnable(ResultNotification type) {
        abstract class Prototype implements Runnable {
            public void run() {
                performBusinessLogic();
                publishResult();
            }

            abstract void publishResult();
        }

        switch (type) {
            case JMS: {
                return new Prototype() {
                    void publishResult() {
                        //Post result to JMS
                    }
                };
            }
            case MAIL: {
                return new Prototype() {
                    void publishResult() {
                        //Post result to MAIL
                    }
                };
            }
        }
        return null;
    }

    private void performBusinessLogic() {
        //Some business logic
    }

}

答案 2

我只能在这种情况下思考

class Outer {
    public void method() {
        abstract class A {
            void bar(){}
            abstract void foo();
        }
        class B extends A {
            @Override
            void foo() {
            }
        }
        final class C extends A {
            @Override
            void foo() {
            }
        }
        A a1 = new B();
        A a2 = new C();
    }
}

但我无法想象真正的用法


推荐