作者LaPass (LaPass)
看板java
標題Re: [問題] Object array與 instanceof如何判斷
時間Sun Nov 24 23:51:15 2013
※ 引述《po19881206 (加菲)》之銘言:
: 最近遇到一個問題,我java在會接到一個Object array 裡面可能會有各種種類的物件
: 像是char array或是int array之類的
: 我想要在依照種類進行不同的處理 像是數字要做運算,字串要做印出之類的
: 要如何處理呢?
: 這個Object不是 Object[]宣告的變數
: 是一個Object物件裡裡面又是多個array的形式
: 我不太知道要怎麼直接用instanceof 來判斷
: 有辦法嗎?
: 請各位大大指導 感謝Q_Q
這是設計者的錯
你可以去ㄉ一ㄤ寫那段程式的人
問他懂不懂泛型之類的
寫程式如果寫的很痛苦
那十之八九是架構設計的錯.....
但是還是可以解的
你看一下這個
Object obj=new Object();
Class<?> c= obj.getClass();
這樣就可以取得那個物件型別
從c基本上可以鑑定出是哪種物件
然後別忘記map這好東西
你可以設計個map這樣用
//定義處理的行為
interface IAction<T>
{
void invoke(T t);
}
//字串的處理行為
class StringAction implement IAction<String>
{
void invoke(String t)
{
system.out.println(t); //印出字串
}
}
/* 其他型別的處理器略過 */
Map<Class<?>,IAction<?>> actions=new HashMap<>();
actions.put(String.class,new StringAction());
/* 其他型別的處理器設置略過 */
然後你收到一個不知道是什麼物件陣列的話
就可以這樣用
(PS 判斷是否為陣列,要用別的方法
我記得Class有個isArray之類的可以用
你找一下
判斷收到陣列之後,你可以用foreach後再去遞迴處理)
Object[] objs; //假設這你收到的物件陣列
for(Object obj:objs)
{
IAction<?> action=actions.get(obj.getClass());
//如果有對應的處理器就執行,沒有的話就不要管他
if(action!=null)action.invoke(obj);
}
完畢~
或是你可以用簡單易懂,但是未來可能會整死自己或是後人的方法
for(Object obj:objs)
{
if(obj instanceof String)
{
//字串的處理....
}
else if(obj instanceof int)
{
//是數字...
}
else if(obj instanceof int[])
{
//是數字陣列
}
/* ....下略... */
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.252.123.3
推 PsMonkey:instanceof 還是有你那個方法沒法解決的好處 XD 11/24 23:59
→ LaPass:是指繼承問題嗎?嗯... 這麻煩了一點,但是我在gson中看過 11/25 00:03
→ LaPass:解法了,他們用工廠模式去解決。不過除非是很複雜的東西, 11/25 00:05
→ LaPass:不然來是用instanceof跟map吧.... 11/25 00:07
→ danny8376:看者這三行推文... JAVA版超好斷 (X 不過instanceof 11/25 00:08
→ danny8376:對大部分狀況應該也算OK啦 除非東西真的夠肥大 11/25 00:10
推 Killercat:這種八成是以前寫ios的把壞習慣帶進來 -_- 11/25 02:53