在一种情况下( @IdRes ),您从API( View.setId() )调用方法,而在另一种情况下,您在自己的代码中调用方法。 此外, getViewId()没有注释,因此签名中返回的inttypes并不明显。
使用以下方法:
private int getUndefinedRes() { ... } private @IdRes int getIdRes() { ... } private @StringRes int getStringRes() { ... } private void setMyString(@StringRes int resourceString) { } private void setMyId(@IdRes int resourceId) { }
lint和检查结果是(从Android Studio 2.3.3开始):
// API method with definitely wrong value (constant) // --> ERROR new View(context).setId(100); new TextView(context).setText(100); // API method with definitely wrong value (from method declaration) // --> ERROR new View(context).setId(getStringRes()); new TextView(context).setText(getIdRes()); // API method with potentially wrong value // --> ok new View(context).setId(getUndefinedRes()); new TextView(context).setText(getUndefinedRes()); // own method with potentially wrong value // --> ERROR setMyString(getUndefinedRes()); setMyId(getUndefinedRes());
似乎lint只查看方法签名。
当你调用API方法时它也更宽松:只有当你做错了很明显时才会显示错误。 我认为这是因为否则将迫使每个人添加大量注释。
另一方面,当您在代码中添加注释时,您将选择附加严重性。