请问在java中
前台每次只一个类对象到HashMap中,然后map对象做为参数调用到后台方法。如下 :
HashMap map = new HashMap();
UserVO uvo = new UserVO();
map.put(uvo , uvo); UIsVO uivo = new UIsVO();
map.put(uivo, uivo);
AmountVO avo = new AmountVO();
map.put(avo, avo);
InvoiceVO ivo = new InvoiceVO();
map.put(ivo, ivo);
......还有很多VO对象,
Service.operator(map);请问在后台能前到前台放进来的对象吗
怎么现实?高手请解释一下?
前台用:session.setAttribute("MyData",map); 放入
后台用:map=(HashMap)session.getAttribute("MyData"); 取出
我要的是得到某个对象
如:前台放进来的是
AmountVO avo = new AmountVO();
map.put(avo, avo); 但后台是不知道它的类型 是 AmountVO
但想得到 AmountVO 类型
就不管前台放进来的是什么类型对象
我在后台想得它的类型?
我在后台想得它的类型?
那简单:设放进来是对象o,则后台用:o.getClass()得到的就是该对象的真正的类型.
答:不管前台放进来的是什么类型对象
我在后台想得它的类型?
那简单:设放进来是对象o,则后台用:o.getClass()得到的就是该对象的真正的类型.
这样在可以取得到 原来对象的属性吗?
怎么搞?
能否这样:设放进来是对象o,则:
if( o instanceof UserVO )
{
UserVO uo=(UserVO)o;
....
}
else if( o instanceof UIsVO )
{
UIsVO uo=(UIsVO)o;
....
} else if( o instanceof AmountVO )
{
AmountVO uo=(AmountVO)o;
....
}
等等....
反射技术似乎还不能完全解决这个问题.我得想想....
第二:既然你要得到AmountVO,或者可以用范型 HashMap<AmountVO> map;
第三: 一个HashMap要放不同种类的那么多对象,如果这些对象毫不相干(类之间没有关系),那么这样是不好的,应该将这些类,抽取出父类或者接口,然后用这个父类作为范型参数,那么就不用判断什么类型了!!
1)每一个不同的VO对象(其类的定义肯定是不同的),都相应设计一个对应于该VO对象的ACTION类(即:每一个VO类,相应设计一个VOACTION类,在该VOACTION类的方法如:execute(VO voobject)中,用于填写针对该VO类的对象在后台进行处理的逻辑代码)
2)设计一个config.xml文件,在该配置文件中,写上每一个VO类所对应的VOACTION类(即:两者之间的映射关系)
好处是:以后再增加新的VO类只要在该.xml文件中增加一行文本就行了(不用再修改程序代码)
3)上述的映射关系其实在程序启动时已读入一个ACTION_HASHMAP中.
4)这样在后台的代码就异常简单了:
以任何VO对象o,从ACTION_HASHMAP.get(o.getClass())中取出对应于该对象的ACTION对象:action_o,直接调用:
action_o.execute(o);就行了.
而且:再加入新的VO对象,后台代码不用修改代码(因为:只要修改一下:增加新的VO类只要在该.xml文件中增加一行文本就行了)以上仅供楼主参考
尽可能不要出现:
if( o instanceof UserVO )
{
UserVO uo=(UserVO)o;
....
}
else if( o instanceof UIsVO )
{
UIsVO uo=(UIsVO)o;
....
}
这种形式的代码(开中药铺式),否则:每增加一个新VO种类该if()就加上一条语句(这不好).
但这些VO对象之间又没有共性(否则:采用实现共同接口+方法重写的多态 就行了)由于:这些VO对象是很不相同的,因而:设计了17楼的这个方案,仅供楼主参考.