[我将TextInputLayout
与TextInputEditText
一起使用,Android Lint总是警告我,在toString()
上调用getText()
可能会产生NullPointerException
。
就我个人而言,即使TextInputEditText
为空,我也从未有过NPE这样做。
[我记得阅读过,返回值只能在创建视图或类似的地方时为null
。
简单地忽略掉毛警告是否安全吗?还是以防万一我应该检查null
?
Editable是interface
。您使用的interface
的实现可能不能为null
,但是即使我们实际上知道在您的用例中不处理NPE是安全的,我还是建议您不要这样做。可能正在使用该接口的实现,该实现的值可能为null。如果问题是一遍又一遍地重复,则可以实现util方法来解决此问题。
编辑
正如Ryan M在评论部分中指出的,并且文档确认,Editable没有getText方法,但是,这不会改变分离我们关注点的一般思想。
要回答这个问题,我们可以看一下源代码。
TextView.getText()
,超类方法是pretty straightforward:它返回mText
。
mText
is marked as nullable,但通过代码查看,没有任何内容将其设置为null,并且构造函数mText
确保返回之前不是checks it。但是,它标记为null
,这意味着至少第三方代码可以通过反射来访问它。
关于某些其他提示(如果有可能发生这种情况,我们可以查看@UnsupportedAppUsage
中的其他用法以查看这是否为有效状态)。像TextView
等方法调用length()
上的方法时不进行空检查,因此,如果构造函数返回后该方法为空,那么您将看到崩溃。
但是,我们也需要查看length()
,因为mText
EditText
。那里有一条评论,向我们提供了我们需要的提示:
EditText
否则该方法将通过各种方式返回overrides getText()
的结果,因此我们上面的分析适用:否则不能为null。
还有一个地方要检查:getText()
是否覆盖 // This can only happen during construction.
if (text == null) {
?没有。
因此简短的答案是:不,除非您有一个奇怪的子类,或者在构造过程中要调用它(除非您自己对它进行了子类化,否则这是可能的)。从技术上讲,它不是强制性的,但实际上它不应使用Google的标准组件来实现。