我一直以為 instanceof 是測試某個物件是否為某個類別的實體,實際上語法看起來也是這樣。
String aString = "a string";
boolean bool = aString instanceof String;
System.out.println(bool);
想當然爾,結果當然是 true。
只是我萬萬沒想到,instanceof 有個限制,只能拿來判斷同繼承樹中的類別。
這是什麼意思?直接看範例:
String aString = "a string";
boolean bool = aString instanceof Double;
System.out.println(bool);
結果會是什麼呢?是 false 嗎?
錯了!是 Compile Error!
inconvertible types
found : java.lang.String
required: java.lang.Double
boolean bool = aString instanceof Double;
1 error
這和我預期的有點出入,限定只能判斷同一繼承樹上的類別大大減低實用性。
我想要的效果就如同字面,是否為某類別的實體(物件),是 => true,不是 => false。
回頭看看 Objective-C,
NSObject 定義了某個類似 intanceof 的方法:
- (BOOL)isKindOfClass:(Class)aClass;
效果如何呢?看個範例:
NSArray *array = [NSArray array];
BOOL arrayIsString = [array isKindOfClass:[NSString class]];
NSLog(@"NSArray is Kind of NSString: %@", (arrayIsString ? @"YES" : @"NO"));
印出來的結果是 "NSArray is Kind of NSString: NO",沒有跳出錯誤!
這才是我想要的 instanceof 啊!! Orz...
Java 加油~好嗎?
String aString = "a string";
boolean bool = aString instanceof String;
System.out.println(bool);
想當然爾,結果當然是 true。
只是我萬萬沒想到,instanceof 有個限制,只能拿來判斷同繼承樹中的類別。
這是什麼意思?直接看範例:
String aString = "a string";
boolean bool = aString instanceof Double;
System.out.println(bool);
結果會是什麼呢?是 false 嗎?
錯了!是 Compile Error!
inconvertible types
found : java.lang.String
required: java.lang.Double
boolean bool = aString instanceof Double;
1 error
這和我預期的有點出入,限定只能判斷同一繼承樹上的類別大大減低實用性。
我想要的效果就如同字面,是否為某類別的實體(物件),是 => true,不是 => false。
回頭看看 Objective-C,
NSObject 定義了某個類似 intanceof 的方法:
- (BOOL)isKindOfClass:(Class)aClass;
效果如何呢?看個範例:
NSArray *array = [NSArray array];
BOOL arrayIsString = [array isKindOfClass:[NSString class]];
NSLog(@"NSArray is Kind of NSString: %@", (arrayIsString ? @"YES" : @"NO"));
印出來的結果是 "NSArray is Kind of NSString: NO",沒有跳出錯誤!
這才是我想要的 instanceof 啊!! Orz...
Java 加油~好嗎?
留言