我的文章都整理添加到了个人博客中,大家可以添加这个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中实现方法返回多种类型的方法,包括使用JSONObject、集合Map以及泛型元组。以下是对这些方法的详细说明: 1. 使用JSONObject: - 在第一种方法中,通过将多个对象序列化到一个JSONObject...
在Java编程中,泛型是一种强大的工具,它允许我们在类、接口和方法中定义类型参数,从而实现对多种数据类型的通用处理。泛型的主要目的是提高代码的类型安全性和重用性,减少类型转换的需要,并在编译时捕获可能的...
在这个"Dwr源码示例"中,我们将深入探讨如何使用DWR调用Java方法,并处理各种类型的参数和返回值。 首先,DWR的核心功能是提供了一种安全、高效的AJAX(异步JavaScript和XML)框架。它通过创建一个JavaScript到Java...
- 当从数据库查询结果中获取时间类型时,会返回相应的Java SQL类型对象,例如`ResultSet.getDate()`, `ResultSet.getTime()`, 或 `ResultSet.getTimestamp()`。 示例代码展示了如何进行转换: ```java import ...
泛型方法是泛型技术在类方法层面的应用,它允许我们定义一个可以处理多种数据类型的通用方法。下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法...
本文将深入探讨Java中String类型和int类型之间的比较方法以及相互转换的技术,这对于理解和优化代码逻辑、提升程序性能具有重要意义。 ### 一、String类型与int类型的基本概念 #### 1.1 String类型 String类型在...
此外,`void`类型的Lambda表达式在Java中也有其特殊之处,如`Consumer<T>`接口,它接受一个类型为T的对象并执行某种操作,但不返回任何值。例如,`Consumer<String> b = s -> list.add(s);`将字符串添加到列表中。 ...
构造方法与类名相同,没有返回类型,也不需要在方法签名中声明void。了解和熟练使用构造方法是Java面向对象编程的基础,下面将详细阐述Java构造方法的相关知识点。 一、构造方法的作用 构造方法的主要任务是在创建...
1. **创建转换方法**:定义一个名为`DateToMySQLDateTimeString`的方法,该方法接受一个`java.util.Date`对象作为参数,并返回符合MySQL `DateTime`格式的字符串。 2. **解析日期和时间**:利用`Date`对象的`...
* getReturnType()方法:返回方法的返回类型 * invoke()方法:调用方法 九、Field类 Field类提供了多种实例方法,包括: * get()方法:返回字段的值 * getGenericType()方法:返回字段的泛型类型 * getName()方法...
`String.valueOf()`方法可以接受多种数据类型作为参数,包括基本类型和引用类型。对于对象,它实际上会调用对象的`toString()`方法。如果参数为null,它会返回"null"字符串。例如: ```java MyObject obj = new ...
在Java编程语言中,数据类型转换、运算符和方法是构建程序的基础元素。这篇入门级资料将引导初学者深入理解这些关键概念。 首先,我们来探讨数据类型转换。Java提供了两种类型转换:自动类型转换(隐式转换)和强制...
Java 中的 String 和 int 类型的相互转换是一个基本的数据类型转换操作,我们可以使用多种方法来实现这种转换,例如使用 `Integer.parseInt()` 方法、`Integer.valueOf()` 方法、`String.valueOf()` 方法等。...
总的来说,Java方法句柄提供了一种高效且类型安全的方式来处理方法调用,它与反射和`invokeDynamic`指令结合,为Java应用程序提供了强大的动态性,尤其在实现动态语言和高性能代码生成场景中显得尤为重要。
本压缩包"java常用工具类和接口返回对象.zip"很可能包含了多种实用的工具方法和设计模式,如工厂模式、单例模式等,用于处理常见的任务,如字符串操作、日期时间处理、集合操作等。 1. **StringUtil**:这个工具类...
在 Java 编程中,方法的返回结果可以是各种类型的,如基本数据类型、对象、集合等。为了方便地处理返回结果,Java 提供了多种封装方式,包括使用 HashMap、泛型对象等。 1. 使用 HashMap 封装返回结果 使用 ...
### Java访问各种类型数据库的方法 #### 一、前言 在现代软件开发中,数据库扮演着极其重要的角色,用于存储和管理数据。Java作为一种广泛使用的编程语言,提供了多种方式来访问不同类型的数据存储系统。本文旨在...
多态使得代码更加灵活,可以处理多种类型的数据。 为了实现面向对象编程,我们还需要了解构造器、抽象方法、接口、访问控制、重载和重写等概念。 构造器用于初始化新创建的对象,比如`public MyClass(int value) {...
方法信息包括方法的名称、方法的返回类型、方法的参数列表等。 六、Java 虚拟机的垃圾收集 Java 虚拟机的垃圾收集是指在 Java 虚拟机中自动地回收不再使用的对象,以释放内存空间。垃圾收集可以是周期性的,也可以...
在这里,`Color`是枚举类型,`RED`, `GREEN`, `BLUE`是枚举的实例,它们默认继承自`java.lang.Enum`类。 2. 访问枚举实例: 你可以通过枚举类型直接访问其实例,例如: ```java Color color = Color.RED; ``` 3. ...