跳到主要內容

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

Mac OS X 10.6 同步收取 Gmail, how?

在 Apple 官方的 Mac OS X 10.6 介紹網頁中, 雖然並沒有在內建的郵件軟體 - Mail 著墨太多. 但是實際上 Mail 也做了一些改善, 讓使用可以更方便, 而這篇文主要目的就是說明怎麼讓 Mail 與 Gmail 進行同步. 在過去使用郵件軟體收取電子郵件的使用經驗中, 往往都需要輸入很多資料, 什麼 "寄件伺服器" "收件伺服器" "通訊協定"... 等等等, 這對一般用戶來說, 只能說是災難. 畢竟沒學過那些專有名詞, 天曉得那是些什麼東西!? 而 Mac OS X 10.6 中的 Mail 不同了, 現在只需要輸入 Email 帳號及密碼, 軟體自動搞定細部設定! 有沒有這麼簡單!? 手邊有 Hotmail 的朋友可以試試看, 只要輸入帳號密碼, 10.6 的 Mail 就會幫你設定好其它需要設定的資料. 不過今天的主角是 Gmail 啦! 而要使用的是 Gmail 提供的 IMAP 的功能, 在使用前得先到 Gmail 中進行一些簡單的設定, 當然小弟也會說明這樣設定的理由 :) OK! Here we go!!!

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

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