作者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
1F:推 PsMonkey:instanceof 还是有你那个方法没法解决的好处 XD 11/24 23:59
2F:→ LaPass:是指继承问题吗?嗯... 这麻烦了一点,但是我在gson中看过 11/25 00:03
3F:→ LaPass:解法了,他们用工厂模式去解决。不过除非是很复杂的东西, 11/25 00:05
4F:→ LaPass:不然来是用instanceof跟map吧.... 11/25 00:07
5F:→ danny8376:看者这三行推文... JAVA版超好断 (X 不过instanceof 11/25 00:08
6F:→ danny8376:对大部分状况应该也算OK啦 除非东西真的够肥大 11/25 00:10
7F:推 Killercat:这种八成是以前写ios的把坏习惯带进来 -_- 11/25 02:53