检查instanceOf但不执行

时间:2019-03-16 17:12:19

标签: java

  private void createObject(List<Activities> listOfActivities){
    ABC object1 = new ABC();
    String value = "";
    if (listOfActivities instanceof XYZ) {
        for (Activities list: listOfActivities) {
            value= ((XYZ) list).getValue();
        }
        object1.setValue(value)
        listOfActivities.add(object1);
      }
  }

在此方法中,listOfActivities具有一些XYZ类型的值。因此,应该执行“ if”块,该块正在检查listOfActivities是否为XYZ类的实例,但未执行。 为什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

List<String>的类型为List,而不是String

因此,您的List<Activity>的类型为List,对于false将返回instanceof Activity

您从列表中检索的对象将是Activity类型。

在这种情况下:

List< Activity > list = new ArrayList<>() ;
list.add( new Activity() ) ;

…请尝试:

boolean isListAnActivity = list instanceof Activity ;  // false
boolean isElementOfListAnActivity = list.get( 0 ) instanceof Activity ;  // true

请参阅此code run live at IdeOne.com

  

isListAnActivity:false

     

isElementOfListAnActivity:是