为什么AS告诉我`(ob instanceof Button)`总是`false`?

时间:2015-05-27 23:35:47

标签: android-studio instanceof

为什么AS告诉我(ob instanceof Button)总是false

此外,它给'Cast to Button'提供了“提示”。如果我接受提示,没有任何改变。

  void setTextSizeForField(int textSize, Object ... obs){
    for(Object ob: obs)
           if (ob instanceof EditText) ((EditText) ob).setTextSize ( textSize );
      else if (ob instanceof TextView) ((TextView) ob).setTextSize ( textSize );
      else if (ob instanceof Button)   ((Button)   ob).setTextSize ( textSize/10 );
  }

信息的全文是:

Condition 'ob instanceof Button' is always 'false' less... (Ctrl+F1) 
This inspection analyzes method control and data flow to report possible conditions that are
 always true or false, expressions whose value is statically proven to be constant, and 
situations that can lead to nullability contract violations. 

Variables, method parameters and return values marked as @Nullable or @NotNull are 
treated as nullable (or not-null, respectively) and used during the analysis to check 
nullability contracts, e.g. report possible NullPointerException errors. 

More complex contracts can be defined using @Contract annotation, for example: 
@Contract("_, null -> null") — method returns null if its second argument is null

@Contract("_, null -> null; _, !null -> !null") — method returns null if
 its second argument is null and not-null otherwise

@Contract("true -> fail") — a typical assertFalse method which throws an
 exception if true is passed to it
The inspection can be configured to use custom @Nullable 

@NotNull annotations (by default the ones from annotations.jar will be used) 

我没有使用注释。

*编辑*

如果我交换了两个else if语句,我没有收到任何警告,代码运行正常。

所以我猜“没关系”可能是有序的,但你认为AS在做什么?

1 个答案:

答案 0 :(得分:7)

Documentation显示Button扩展TextView,因此永远不会占用分支。如果您将ButtonTextView的支票反转,则会采用不同的路径。