用匿名内部类初始化的静态字段有什么问题吗?

我在旧的遗留系统中发现了这段代码,如果没有任何问题,我不想碰它。


但是我觉得这段代码有一些缺陷,我找不到它。这只是不常见的模式还是存在一些隐藏的陷阱或内存泄漏?


private static final Foo action =  new Foo() {


    @Override

    public void onAction(MyDialogFragment fragment) {

        if (fragment.getContext() != null) {

            fragment.getActivity().finish();

        }

    }

};

此代码用于片段中


更新:我怀疑匿名内部类的对象具有对父片段的引用,并且由于此类的对象保存在静态字段中,因此永远不会收集它,因此也永远不会收集父片段。我的推理错了吗?


斯蒂芬大帝
浏览 214回答 3
3回答

慕的地8271018

这种方法没有错,因为逻辑只处理作为参数传递的值。使用静态只是避免创建 Foo 类的多个实例。

皈依舞

就在这里。最好像这样获得片段:MyDialogFragment fragment = MyDialogFragment.instance();fragment.setNavigator(this);getSupportFragmentManager().beginTransaction().replace(R.id.activity_myDialog_layout, fragment).commit();有个更好的方法。您可以创建 3 个类和一个将由 3 个类实现的接口。活动、片段和演示者。接口将是合同。这是更先进的。

侃侃无极

静态上下文中的匿名类不持有对外部对象的引用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java