【问题标题】:Fragments with empty constructors vs. newInstance具有空构造函数的片段与 newInstance
【发布时间】:2016-04-12 17:23:49
【问题描述】:

如果我正在创建一个 Fragment 类,我已经看到到处都写着包含一个空构造函数是个好主意(尽管我不确定为什么,因为我一直认为 Java 有一个在底层调用的空构造函数对于任何 Java 类,只要您不创建带参数的构造函数,并且 Android 不喜欢您使用带参数的构造函数制作片段)。

但是如果我正在创建一个 newInstance() 方法(这样我可以使用默认参数设置我的 Bundle),我是否必须创建空构造函数?

如果包含 newInstance() 而不是空的构造函数就足够了,即使包中没有参数,我是否可以对所有片段执行此操作?这有什么缺点吗?

【问题讨论】:

  • 没有缺点。事实上 newInstance() 强制执行工厂模式...当您以后想要更改或重构代码时,这将变得很有用。
  • 我还需要空构造函数吗?为什么我需要包含它?
  • 不,你不需要空的构造函数
  • “我一直认为,只要您不创建带参数的构造函数,Java 就会在后台为任何 Java 类调用一个空构造函数”——正确。 “即使捆绑包中没有参数,我可以对我的所有片段执行此操作吗?” ——如果你愿意,你可以。我会打电话给new WhateverFragment()。您不需要实现零参数的公共构造函数;你只是继承它。
  • 正确——你的假设是错误的。如果不实现公共零参数构造函数,则从超类继承一个。见this sample fragment“我的困惑源于此”——是的,文档很烂。

标签: java android android-fragments instantiation


【解决方案1】:

创建静态getInstance() 方法时,您将使用该方法获取该Fragment 的新实例。您将不需要一个空的构造函数。

【讨论】:

  • 如果我决定不使用 newInstance(),为什么空构造函数是个好主意?为什么这与自动处理空构造函数的普通 Java 类有所不同?
猜你喜欢
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 2011-04-09
  • 1970-01-01
  • 2012-11-18
  • 2021-05-25
相关资源
最近更新 更多