2013-04-15 85 views
2

我该如何编写一条if语句:如果pos2 [targetPos3]没有指向哈希集(不是哈希集)?我尝试过,但它仍然给我一个零点例外。指向哈希集java

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

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

检查NULL使用'POS2 [指数] == null'和使用'instanceof'如果不为null检查的类型。为什么你将它们存储在Object []中? –

+1

[SSCCE请](http://sscce.org)。 –

+0

@DeepakBala,当检查'instanceof'为null时不需要检查'pos2 [idx]'为空,那么它就不能是一个自然的实例。 –

回答

4

试试这个:

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

没有办法,看看它是一个StringHashSet(或任何其他类型的这个问题),因为type erasure

+0

谢谢! – Dodi

1

instanceof运营商将在这里为您提供帮助。它可以告诉你,如果对象是HashSet,但由于type erasure,在运行时,您将无法判断它是否为HashSet<String>,如果它是HashSet

if (!(pos2[targetPos3] instanceof HashSet)) { 
0

instanceof是你要找的操作:您要使用instanceof

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

。例如:

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

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

pos2 = new Object[desiredLength]; 

if((targetPos3 < pos2.length) && (pos2[targetPos3] instanceof HashSet)) { 
    ... 
} 
0

你不做任何错误检查。

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

还请检查word != null
你需要的是instanceof运营商能够验证是你确实有一个HashSet