【问题标题】:It is possible to stop (return) execution of a inherited class from the super method?可以停止(返回)从超级方法继承的类的执行吗?
【发布时间】:2020-05-16 12:30:30
【问题描述】:

我有一个安全的主类,用于检查内存中是否存在 onCreate() 方法中的某些内容(这是一种来自 Android 的方法,您可以覆盖该方法以生成屏幕)。如果没有,尝试加载它。一些类正在扩展该类。

所有类在执行其代码之前调用父类的super.onCreate() 方法。如果父类无法加载必要的数据,我的目标是中断继承类的执行。

如果我在super.onCreate() 方法中执行return,继承的onCreate() 方法会继续执行,所以return 不是我的解决方案。

有没有办法在java中实现这一点?

【问题讨论】:

    标签: java android inheritance


    【解决方案1】:

    您可以添加一个抽象方法让它们覆盖并从 onCreate 调用它,而不是让子类继承 onCreate(并依赖它)

    abstract void onChildCreate();
    
    public final void onCreate() {
    
       //do stuff
    
       if (isDataLoaded) {
            onChildCreate();
       } 
    }
    

    【讨论】:

    • 这个不行,因为继承类的onCreate是由te OS调用的,不是超类调用的
    • @NullPointerException 这意味着超类中的 onCreate 将被调用。或者你是什么意思?
    【解决方案2】:

    你可以在super方法中抛出任何异常,然后在sub方法中catch,如果你需要对该情况进行任何操作,否则什么都不做,执行将停止。 小例子:

    class Base {
    
        public void onCreate() {
    
            if (true) {
                throw new IllegalStateException();
            }
        }
    }
    
    class Child extends Base {
    
        public void onCreate() {
            try {
                super.onCreate();
            } catch (IllegalStateException e) {
                e.printStackTrace();
                return;
            }
    
            // my code
        }
    }
    

    【讨论】:

    • 在我的示例中,异常被捕获,metod 执行将成功停止。
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2019-03-06
    • 2015-03-19
    相关资源
    最近更新 更多