Java方法返回多种类型
我的文章都整理添加到了个人博客中,大家可以添加这个RSS以便获得即时的文章信息。
?
说明:
1.本文讲述3种方式 如有更好方式 欢迎讨论
2.本例前准备:下载jar包:
3.三种方式简要说明
4.具体内容看注释 写的很清楚,如有疑问欢迎讨论
?
1.测试类
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){//方式一:使用jsonJSONObject 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);}}
?
? ? 元组:
package com.cxyapi.generics;/** 元组 可以让一个方法返回多个对象 * @author cxy @ www.cxyapi.com */public class TwoTuple<A,B>{/* 定义成final 是为了保证其安全性,不能进行修改 * public final 比private+getter/setter更符合当前的需求 */public final A first; public final B second;public TwoTuple(A a,B b){first=a;second=b;}public static TwoTuple<String,Integer> tupleTest(){return new TwoTuple<String,Integer>("cxy",1);}public static void main(String[] args){System.out.println(TwoTuple.tupleTest().first);System.out.println(TwoTuple.tupleTest().second);}}
?
? ?涉及到的Student类和Teacher类
package com.cxyapi.generics;/** * @author cxy @ www.cxyapi.com */public class Teacher{private String name; // 姓名private String course; // 课程public Teacher(String name, String course){this.name = name;this.course = course;}public void show(){System.out.println("我叫:"+this.name+",是一名"+this.course+"教师");}public String getName(){return name;}public void setName(String name){this.name = name;}public String getCourse(){return course;}public void setCourse(String course){this.course = course;}}
?
package com.cxyapi.generics;/** * @author cxy @ www.cxyapi.com */public class Student{private String name; //姓名private String school; //就读学校public Student(String name, String school){this.name = name;this.school=school;}public Student init(){return new Student("1", "2");}public String getName(){return name;}public void setName(String name){this.name = name;}public String getSchool(){return school;}public void setSchool(String school){this.school = school;}public void show(){System.out.println("我叫:"+this.name+",就读于"+this.school);}}
?
?
声明:
1.原创文章,转载请标明并加本文连接。
2.文章反映个人愚见,如有异议欢迎讨论指正
3.更多的内容请看我的 ?个人博客(测试版)
25 楼 snkcxy 1 小时前 MrCrapBag 写道snkcxy 写道jjcang 写道做个返回对象,或者数组就可以了。