zoukankan      html  css  js  c++  java
  • Java 方法返回多种类型

    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);
        }
    }
  • 相关阅读:
    skynet源码分析之socketchannel
    skynet源码分析之master/salve集群模式
    skynet源码分析之网络层——网关服务器
    Android反编译基础(apktoos)--广工图书馆APK
    Android-Native-Server 启动和注册详细分析
    Android NDK r8 windows环境搭建
    Android 4.1.1源码编译
    Android Binder------ServiceManager启动分析
    更改系统盘符后DFS无法复制故障处理
    Centos6.9部署Gitlab-11.9.8并汉化
  • 原文地址:https://www.cnblogs.com/Fooo/p/12370376.html
Copyright © 2011-2022 走看看