我的文章都整理添加到了个人博客中,大家可以添加这个RSS以便获得即时的文章信息。
说明:
1.本文讲述3种方式 如有更好方式 欢迎讨论
2.本例前准备:下载jar包:
- http://sourceforge.net/ 下搜索下载json-lib、ezmorph
-
http://commons.apache.org/ 下搜索下载以下jar
lang(注意 不要使用最新的3.1 用2.6)、collections、beanutils
3.三种方式简要说明
- Json方式(目前web开发常用的方式)
- 集合方式(最容易想到)
- 泛型元组(最简单最实用)
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) { //方式一:使用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); } }
元组:
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.更多的内容请看我的 个人博客(测试版)
相关推荐
Java方法返回多种类型.docxJava方法返回多种类型.docx
Java中的多态性指在一个类实例化时,它可以引用多种不同类型的对象并自动调用适当的方法。这个特征让Java程序员能够更加灵活地编写代码,并且简化了许多任务。 Java中有两种多态性:静态多态性和动态多态性。静态多...
在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...
在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...
7.5.5 重载容易引发误解的两个地方——返回类型和形参名 170 7.5.6 重载中的最难点——参数匹配原则 171 7.6 使用类的实例作为方法参数 172 7.6.1 超车方法:使用类实例做参数 172 7.6.2 调用这个方法 173 ...
其次,Object类是实现Java泛型的基础,Java中的泛型是一种提供给Java程序员们使用的编程技术,它允许程序员们编写出使用一种或多种类型作为参数、返回结果或变量的类、接口以及方法,并且可以在运行时进行类型安全性...
java jdbc 分页工具类,以及返回集合数据的封装, private int limit = 10;//每页的个数 /** * 当前页 */ private int page; // /** * 总行数 */ private int totalRows; // /** * 总页数 */ private ...
3、所有类至少有一个构造器,构造器用来初始化类的新对象,构造器与类同名,返回类型只能为void。 ( ) 4、包是按照目录、子目录存放的,可以在程序中用package定义包,若没有package一行,则表示该文件中的类不...
7.5.5 重载容易引发误解的两个地方——返回类型和形参名 170 7.5.6 重载中的最难点——参数匹配原则 171 7.6 使用类的实例作为方法参数 172 7.6.1 超车方法:使用类实例做参数 172 7.6.2 调用这个方法 173 ...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
所以我对socket进行了封装,客户端和服务端可以通过配置注解,让双方相互调用注解方法,提供了专门的工具类,让注解方法可以支持返回list或map等集合或其他的类型,三行代码你就可以完美的使用socket进行通信,支持...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
Java中的多态性指在一个类实例化时,它可以引用多种不同类型的对象并自动调用适当的方法。这个特征让Java程序员能够更加灵活地编写代码,并且简化了许多任务。 Java中有两种多态性:静态多态性和动态多态性。静态多...
6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...
构造方法的名称和类同名,没有返回类型。尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。因此,构造方法不能直接调用,只能由new 操作符调用。构造方法对于类是十分重要的,对象的初始...