package com.cxyapi.generics; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import net.sf.json.JSONObject; /** Java方法返回多種類型 * @author cxy @ www.cxyapi.com */ public class ReturnMultipleResult { public static void main(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<String,Object> result2=ReturnMultipleResult.way2(); System.out.println(result2); for(Entry<String, Object> one: 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<Student, Teacher> result3=ReturnMultipleResult.way3(); result3.first.show(); result3.second.show(); System.out.println(new TwoTuple<String,Integer>("cxy",1)); //應該不用多說了吧~ 優勢太明顯了,不用判斷,不用轉型,不用導入jar包,隨意更換類型 } //方式一:使用json返回多個結果對象 public static JSONObject way1() { Student s=new Student("小明","清華大學"); Teacher t=new Teacher("cxyapi", "Java編程"); JSONObject backObject=new JSONObject(); backObject.put("s", s); backObject.put("t", t); return backObject; } //方式二:集合方式 public static Map<String,Object> way2() { Student s=new Student("小明","清華大學"); Teacher t=new Teacher("cxyapi", "Java編程"); Map<String,Object> backObject=new HashMap<String, Object>(); backObject.put("s", s); backObject.put("t", t); return backObject; } //方式二:泛型元組 public static TwoTuple<Student, Teacher> way3() { Student s=new Student("小明","清華大學"); Teacher t=new Teacher("cxyapi", "Java編程"); return new TwoTuple<Student, Teacher>(s,t); } }