明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
随笔 - 1277, 文章 - 0, 评论 - 214, 阅读 - 321万
  博客园  :: 首页  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Java 方法返回多种类型

Posted on   且行且思  阅读(4945)  评论(0编辑  收藏  举报
复制代码
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);
    }
}
复制代码

 

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2012-02-27 Jquery: jquery.combogrid-1.5.0 ,json返回下拉列表.
2012-02-27 静态新闻分页的js解决方案
点击右上角即可分享
微信分享提示