跳到主要內容

驚!原來 instanceof 有這樣的限制

我一直以為 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 加油~好嗎?

留言

這個網誌中的熱門文章

誰讓你心動, 誰讓你心痛, 誰會讓你偶而想要擁他在懷中... 誰又在乎你的夢, 誰說你的心思他會懂, 誰為你感動... 許久沒聽到這熟悉的詞與曲, 更懷念那甜美細膩的好嗓音. 於是趁著空檔, 拿出了放在那如同收藏我的回憶般, 收藏櫃子裡頭的兩張專輯.

第二章 緊急返鄉 - 推著爺爺去散步

也許是曾經身為軍人的關係, 爺爺很排斥使用輪椅... 也許是曾經身為一家之主的榮耀, 縱使小便不方便卻堅持不肯使用尿壺... 也許就是因為爺爺是爺爺, 所以很少開口要我幫忙他些什麼凡是自己來, 總是他在給我, 我卻很少能給他什麼... 只是兩次的手術, 在病床上躺久了, 他的身體狀況真的大不如前... 沒辦法想自己起來走走就走走, 想坐到沙發就坐到沙發, 想拿起遙控器看看電視就拿, 想回房休息就回房間. 這樣的光景, 以前是再熟悉不過的... 很希望爺爺真的能趕快好起來, 而回家時一切都沒變, 爺爺看到我回家開心大笑起身握握我的手... 現在的他, 只能任我們宰割... 儘管他再怎麼使勁, 那纖細的雙腿依然撐不住他的身子, 不喜歡輪椅也得坐輪椅... 儘管他再怎麼不願意, 行動不方便的他還是被我們包了尿布, 不喜歡尿布也得包尿布... 爺爺一點點的隱私, 一點點的尊嚴也不剩, 連不願意吃飯, 都被我們直接灌食, 連絕食的權力都沒有...

引數?! 參數??!! 什麼鬼啊!!

我想這個不僅是只有我會遇到的問題, 大概也是所有 Programming 的人都有的疑惑 (應該是吧?) 什麼引數?? 什麼參數?? 天啊... 到底是誰翻譯的呀!!!! 就字面上來看... 講句實在話, 我真的不了解, 大概是學藝不精所致. 也許有些人認為 => 管它那麼多!! 寫得出來就好了!! 不過龜毛如我, 我還是想搞清楚定義是什麼!