为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

斯蒂芬大帝 2021-09-29 17:44:05
我在旧的遗留系统中发现了这段代码,如果没有任何问题,我不想碰它。但是我觉得这段代码有一些缺陷,我找不到它。这只是不常见的模式还是存在一些隐藏的陷阱或内存泄漏?private static final Foo action =  new Foo() {    @Override    public void onAction(MyDialogFragment fragment) {        if (fragment.getContext() != null) {            fragment.getActivity().finish();        }    }};此代码用于片段中更新:我怀疑匿名内部类的对象具有对父片段的引用,并且由于此类的对象保存在静态字段中,因此永远不会收集它,因此也永远不会收集父片段。我的推理错了吗?
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

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


查看完整回答
反对 回复 2021-09-29
?
皈依舞

TA贡献1851条经验 获得超3个赞

就在这里。最好像这样获得片段:


MyDialogFragment fragment = MyDialogFragment.instance();

fragment.setNavigator(this);

getSupportFragmentManager().beginTransaction().replace(R.id.activity_myDialog_layout, fragment).commit();

有个更好的方法。您可以创建 3 个类和一个将由 3 个类实现的接口。活动、片段和演示者。接口将是合同。这是更先进的。


查看完整回答
反对 回复 2021-09-29
?
侃侃无极

TA贡献2051条经验 获得超10个赞

静态上下文中的匿名类不持有对外部对象的引用。


查看完整回答
反对 回复 2021-09-29
  • 3 回答
  • 0 关注
  • 207 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信