Java方法返回多种类型

阅读更多

我的文章都整理添加到了个人博客中,大家可以添加这个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 result2=ReturnMultipleResult.way2();
		System.out.println(result2);
		for(Entry 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 result3=ReturnMultipleResult.way3();
		result3.first.show();
		result3.second.show();
		System.out.println(new TwoTuple("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 way2()
	{
		Student s=new Student("小明","清华大学");
		Teacher t=new Teacher("cxyapi", "Java编程");
		Map backObject=new HashMap();
		backObject.put("s", s);
		backObject.put("t", t);
		return backObject;
	}
	
	//方式二:泛型元组
	public static TwoTuple way3()
	{
		Student s=new Student("小明","清华大学");
		Teacher t=new Teacher("cxyapi", "Java编程");
		return new TwoTuple(s,t);
	}
}

 

    元组:

package com.cxyapi.generics;

/** 元组  可以让一个方法返回多个对象
 * @author cxy @ www.cxyapi.com
 */
public class TwoTuple
{
	/* 定义成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 tupleTest()
	{
		return new TwoTuple("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,泛型,元组)