欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java方法返回多种类型

程序员文章站 2022-04-04 20:05:13
...

我的文章都整理添加到了个人博客中,大家可以添加这个RSS以便获得即时的文章信息。

 

说明:

1.本文讲述3种方式 如有更好方式 欢迎讨论

2.本例前准备:下载jar包:

  1. http://sourceforge.net/ 下搜索下载json-lib、ezmorph
  2. http://commons.apache.org/  下搜索下载以下jar
    lang(注意 不要使用最新的3.1 用2.6)、collections、beanutils

3.三种方式简要说明

  1. Json方式(目前web开发常用的方式)
  2. 集合方式(最容易想到)
  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)
	{
		//方式一:使用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.更多的内容请看我的  个人博客(测试版)