我该如何编写一条if语句:如果pos2 [targetPos3]没有指向哈希集(不是哈希集)?我尝试过,但它仍然给我一个零点例外。指向哈希集java
Object[] pos2;
int targetPos3;
targetPos3 = word.charAt(2) - 'a';
if(pos2[targetPos3] != (HashSet<String>) pos2[targetPos3]){
System.out.println("Sorry");
}
我该如何编写一条if语句:如果pos2 [targetPos3]没有指向哈希集(不是哈希集)?我尝试过,但它仍然给我一个零点例外。指向哈希集java
Object[] pos2;
int targetPos3;
targetPos3 = word.charAt(2) - 'a';
if(pos2[targetPos3] != (HashSet<String>) pos2[targetPos3]){
System.out.println("Sorry");
}
试试这个:
if(!(pos2[targetPos3] instanceof HashSet)){
System.out.println("Sorry");
}
没有办法,看看它是一个String
HashSet
(或任何其他类型的这个问题),因为type erasure。
谢谢! – Dodi
instanceof
运营商将在这里为您提供帮助。它可以告诉你,如果对象是HashSet
,但由于type erasure,在运行时,您将无法判断它是否为HashSet<String>
,如果它是HashSet
。
if (!(pos2[targetPos3] instanceof HashSet)) {
在Java中使用instanceof operator。
if (!(pos2[targetPos3] instanceof HashSet)) {
// ...
}
instanceof
是你要找的操作:您要使用instanceof
if(! pos2[targetPos3] instanceof HashSet){
System.out.println("Sorry");
}
。例如:
if(pos2[targetPos3] instanceof HashSet) {
...
}
但是,您还需要实例化您的数组并进行边界检查。所以:
pos2 = new Object[desiredLength];
if((targetPos3 < pos2.length) && (pos2[targetPos3] instanceof HashSet)) {
...
}
你不做任何错误检查。
if(targetPos3 < pos2.length){
if(!(pos2[targetPos3] instanceof HashSet)){
System.out.println("Sorry");
}
}
还请检查word != null
。
你需要的是instanceof
运营商能够验证是你确实有一个HashSet
检查NULL使用'POS2 [指数] == null'和使用'instanceof'如果不为null检查的类型。为什么你将它们存储在Object []中? –
[SSCCE请](http://sscce.org)。 –
@DeepakBala,当检查'instanceof'为null时不需要检查'pos2 [idx]'为空,那么它就不能是一个自然的实例。 –