packagecom.cxyapi.generics;importjava.util.HashMap;importjava.util.Map;importjava.util.Map.Entry;importnet.sf.json.JSONObject;/**Java方法返回多种类型
*@authorcxy @ www.cxyapi.com*/
public classReturnMultipleResult
{public static voidmain(String[] args)
{//方式一:使用json
JSONObject result1=ReturnMultipleResult.way1();
System.out.println(result1);
JSONObject jos=(JSONObject)result1.get("s");
System.out.println(jos.get("name"));/*JSONObject中存放的都是Object类型(其实是JSONObject类型)
* 如果想使用原来的类型,还需要其他的转换方式(toBean方法)
* 但是toBean方法 对于 有自定义构造函数的class,还需要一个init方法或定义映射
* 好麻烦呀~
* 并且这种方式还需要导入各种jar包
* 但是这种方式并不是一无是处,在action/controller层面还是很好用的,不适合纯业务处理的bo层。*/System.out.println("========================");//方式二:集合
Map result2=ReturnMultipleResult.way2();
System.out.println(result2);for(Entryone: result2.entrySet())
{if(one.getKey().equals("s"))
{
Student s=(Student)one.getValue();
s.show();
}else if(one.getKey().equals("t"))
{
Teacher t=(Teacher)one.getValue();
t.show();
}
}/*这种方式采用Object超级父类来擦出类型差异
* 但是这种方式处理起来比较复杂,你需要自己判断到底是哪种类型的,并做相应的类型转化*/System.out.println("========================");//方式三:使用泛型元组
TwoTuple result3=ReturnMultipleResult.way3();
result3.first.show();
result3.second.show();
System.out.println(new TwoTuple("cxy",1));//应该不用多说了吧~ 优势太明显了,不用判断,不用转型,不用导入jar包,随意更换类型
}//方式一:使用json返回多个结果对象
public staticJSONObject way1()
{
Student s=new Student("小明","清华大学");
Teacher t=new Teacher("cxyapi", "Java编程");
JSONObject backObject=newJSONObject();
backObject.put("s", s);
backObject.put("t", t);returnbackObject;
}//方式二:集合方式
public static Mapway2()
{
Student s=new Student("小明","清华大学");
Teacher t=new Teacher("cxyapi", "Java编程");
Map backObject=new HashMap();
backObject.put("s", s);
backObject.put("t", t);returnbackObject;
}//方式二:泛型元组
public static TwoTupleway3()
{
Student s=new Student("小明","清华大学");
Teacher t=new Teacher("cxyapi", "Java编程");return new TwoTuple(s,t);
}
}