Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 385|回复: 0

[Java基础知识]Eclipse中IAdaptable思想的简单应用

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-2 13:00:04 | 显示全部楼层 |阅读模式
    Eclipse中大量地使用IAdaptable来动态的进行类型转化,想来这个方法还是挺好的,如果不是,它怎么能成eclipse的核心呢。下面给出应用IAdaptable的一个简单例子。 下面给出实现: 具有转换类型能力的IAdaptable接口:


    public
      
    interface
      IAdaptable


    {
        public Object getAdapter(Class clazz);
    }
    实体User:   


    public
      
    class
      User
    implements
      IAdaptable


    {
        private int id;
        private String name;
        private String sex;
        public int getId()
        {
            return id;
        }
        public void setId(int id)
        {
            this.id = id;
        }
        public String getName()
        {
            return name;
        }
        public void setName(String name)
        {
            this.name = name;
        }
        public String getSex()
        {
            return sex;
        }
        public void setSex(String sex)
        {
            this.sex = sex;
        }
       
        public Object getAdapter(Class clazz)
        {
            if(clazz==Model.class){
                return getModelAdapter();
            }
            return null;
        }
       
        private Object getModelAdapter()
        {
            Model model = new Model();
            model.addAttribute("id", id);
            model.addAttribute("name", name);
            model.addAttribute("sex", sex);
            model.setData(this);
            return model;
        }
    }
       实体Address:   


    public
      
    class
      Address
    implements
      IAdaptable


    {
        private int id;
        private String name;
        private String street;
        private String zipcode;
       
        public int getId()
        {
            return id;
        }
        public void setId(int id)
        {
            this.id = id;
        }
        public String getName()
        {
            return name;
        }
        public void setName(String name)
        {
            this.name = name;
        }
        public String getStreet()
        {
            return street;
        }
        public void setStreet(String street)
        {
            this.street = street;
        }
        public String getZipcode()
        {
            return zipcode;
        }
        public void setZipcode(String zipcode)
        {
            this.zipcode = zipcode;
        }
        public Object getAdapter(Class clazz)
        {
            if(clazz==Model.class){
                return getModelAdapter();
            }
            return null;
        }
       
        private Object getModelAdapter()
        {
            Model model = new Model();
            model.addAttribute("id", id);
            model.addAttribute("name", name);
            model.addAttribute("street", street);
            model.addAttribute("zipcode", zipcode);
            model.setData(this);
            return model;
        }
    }
       模型,兼容User和Address   


    public
      
    class
      Model
    implements
      IAdaptable


    {
        private Map<String, Object> attributes;
        private Object data;
        public Model()
        {
            attributes = new HashMap<String, Object>();
        }
        public Object getAdapter(Class clazz)
        {
            if(clazz==User.class){
                return getUserAdapter();
            }
            if(clazz==Address.class){
                return getAddressAdapter();
            }
            return null;
        }
       
        private Object getAddressAdapter()
        {
            Address address = (Address)data;
            address.setId(Integer.parseInt(String.valueOf(this.getAttribute("id"))));
            address.setName(String.valueOf(this.getAttribute("name")));
            address.setStreet(String.valueOf(this.getAttribute("street")));
            address.setZipcode(String.valueOf(this.getAttribute("zipcode")));
            return address;
        }
        private Object getUserAdapter()
        {
            User user = (User)data;
            user.setId(Integer.parseInt(String.valueOf(this.getAttribute("id"))));
            user.setName(String.valueOf(this.getAttribute("name")));
            user.setSex(String.valueOf(this.getAttribute("sex")));
            return user;
        }
        public void addAttribute(String key,Object value){
            attributes.put(key, value);
        }
        public Object getAttribute(String key){
            return attributes.get(key);
        }
        public Map<String, Object> getAttributes()
        {
            return attributes;
        }
       
        public Object getData()
        {
            return data;
        }
        public void setData(Object data)
        {
            this.data = data;
        }
    }
       视图,将模型显示:


    public
      
    class
      View


    {
        private Model model;
       
        public Model getModel()
        {
            return model;
        }
        public void setModel(Model model)
        {
            this.model = model;
        }
        //显示模型数据,这里你可以用别的方式,甚至应用到web上
        public void viewModel(){
            System.out.println(model.getData().getClass().getName());
            Set<Entry<String, Object>> entry = model.getAttributes().entrySet();
            for(Entry<String, Object> entry2 : entry)
            {
                System.out.println(entry2.getKey() + " = " + entry2.getValue());
            }
        }
    }
       跑一下:


    public
      
    class
      AdapterTest


    {
        public static void main(String[] args)
        {
            User user = new User();
            user.setId(1001);
            user.setName("useraaa");
            user.setSex("M");
            
            //将实体转换成模型
            Model model = (Model)user.getAdapter(Model.class);
            assert(model!=null):" model should not be null !";
            View view = new View();
            view.setModel(model);//注入模型
            view.viewModel();//显示
            
            //把模型转换为实体
            User newUser = (User)model.getAdapter(User.class);
            assert(newUser!=null):" entity should not be null !";
            System.out.println(newUser.getId()+ "  " + newUser.getName());
            
            Address address = new Address();
            address.setId(2002);
            address.setName("addressaaa");
            address.setStreet("street 1");
            address.setZipcode("5002");
            
            //将实体转换成模型
            model = (Model)address.getAdapter(Model.class);
            assert(model!=null):" model should not be null !";
            view.setModel(model);//注入模型
            view.viewModel();//显示
            
            //把模型转换为实体
            Address newAddress = (Address)model.getAdapter(Address.class);
            assert(newAddress!=null):" entity should not be null !";
            System.out.println(newAddress.getId()+ "  " + newAddress.getName() + "   "+newAddress.getStreet() + "  "+ newAddress.getZipcode());
        }
    }
       输出结果: adapter.entity.User
    sex = M
    name = useraaa
    id = 1001
    1001  useraaa
    adapter.entity.Address
    street = street 1
    name = addressaaa
    zipcode = 5002
    id = 2002
    2002  addressaaa   street 1  5002     这里为了简单化,省去控制层,但这并不妨碍对IAdaptable的理解。你可以将转换工作从实体中抽取出来,使结构更加清晰。  

      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://file.javaxxz.com/2014/10/2/130003250.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 22:08 , Processed in 0.313957 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表