2

我将如何编写一个 if 语句: if pos2[targetPos3] doesn't point to a hashset (is not a hashset) ?我试过了,但它仍然给了我一个空点异常。

Object[] pos2;
int targetPos3;
targetPos3 = word.charAt(2) - 'a';

if(pos2[targetPos3] != (HashSet<String>) pos2[targetPos3]){
   System.out.println("Sorry");
 }
4

6 回答 6

4

试试这个:

if(!(pos2[targetPos3] instanceof HashSet)){
    System.out.println("Sorry");
}

由于类型 erasure ,无法查看它是否是HashSetof (或任何其他类型) 。String

于 2013-04-15T16:39:56.733 回答
1

instanceof接线员会在这里为您提供帮助。它可以告诉你对象是否是 a HashSet,但由于类型擦除,在运行时,你将无法判断它是否是 a HashSet<String>,只是如果它是 a HashSet

if (!(pos2[targetPos3] instanceof HashSet)) {
于 2013-04-15T16:40:03.177 回答
0

在 Java 中使用instanceof 运算符。

if (!(pos2[targetPos3] instanceof HashSet)) {
   // ...
}
于 2013-04-15T16:40:06.263 回答
0

instanceof是您要查找的运算符:

if(! pos2[targetPos3] instanceof HashSet){
    System.out.println("Sorry");
}
于 2013-04-15T16:40:44.890 回答
0

你想用instanceof. 例如:

if(pos2[targetPos3] instanceof HashSet) {
    ...
}

但是,您还需要实例化您的数组并进行边界检查。所以:

pos2 = new Object[desiredLength];

if((targetPos3 < pos2.length) && (pos2[targetPos3] instanceof HashSet)) {
    ...
}
于 2013-04-15T16:41:01.007 回答
0

你不做任何错误检查。

if(targetPos3 < pos2.length){   
   if(!(pos2[targetPos3] instanceof HashSet)){
      System.out.println("Sorry");
   }
}

还要检查word != null.
您需要的是instanceof操作员来验证您是否真的有一个HashSet

于 2013-04-15T16:41:34.043 回答