博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用Map创建Copy Object
阅读量:5214 次
发布时间:2019-06-14

本文共 4404 字,大约阅读时间需要 14 分钟。

定义上下文行为,要继承Map

package com.wjz.core;import java.io.Serializable;import java.util.Map;public interface CustomSubjectContext extends Map
{ void setSessionId(Serializable sessionId); Serializable getSessionId(); void setAuthenticated(Boolean authc); Boolean isAuthenticated();}

定义MapContext上下文,定义备份Map,实现备份Map的存取等关乎map的行为,实现Map

package com.wjz.core;import java.io.Serializable;import java.util.Collection;import java.util.Collections;import java.util.HashMap;import java.util.Map;import java.util.Set;import org.springframework.util.CollectionUtils;public class CustomMapContext implements Map
, Serializable { private static final long serialVersionUID = 6611136447999868186L; private final Map
backingMap; public CustomMapContext() { backingMap = new HashMap
(); } public CustomMapContext(Map
map) { this(); if (!CollectionUtils.isEmpty(map)) { this.backingMap.putAll(map); } } @Override public int size() { return backingMap.size(); } @Override public boolean isEmpty() { return backingMap.isEmpty(); } @Override public boolean containsKey(Object key) { return backingMap.containsKey(key); } @Override public boolean containsValue(Object value) { return backingMap.containsValue(value); } @Override public Object get(Object key) { return backingMap.get(key); } @Override public Object put(String key, Object value) { return backingMap.put(key, value); } @Override public Object remove(Object key) { return backingMap.remove(key); } @Override public void putAll(Map
m) { backingMap.putAll(m); } @Override public void clear() { backingMap.clear(); } @Override public Set
keySet() { return Collections.unmodifiableSet(backingMap.keySet()); } @Override public Collection
values() { return Collections.unmodifiableCollection(backingMap.values()); } @Override public Set
> entrySet() { return Collections.unmodifiableSet(backingMap.entrySet()); } protected void nullSafePut(String key, Object value) { if (value != null) { put(key, value); } } @SuppressWarnings("unchecked") protected
E getTypeValue(String key, Class
type) { E val = null; Object result = backingMap.get(key); if (result != null) { if (!type.isAssignableFrom(result.getClass())) { // 类型不正确 } val = (E) result; } return val; }}

定义默认的上下文实现类,继承MapContext上下文,具体实现上下文

package com.wjz.core;import java.io.Serializable;public class DefaultCustomSubjectContext extends CustomMapContext implements CustomSubjectContext {    private static final long serialVersionUID = -273450905542274017L;        private static final String SESSION_ID = ".SESSION_ID";        private static final String AUTHC = ".AUTHC";    public DefaultCustomSubjectContext() {        super();    }        public DefaultCustomSubjectContext(CustomSubjectContext sctx) {        super(sctx);    }        @Override    public void setSessionId(Serializable sessionId) {        nullSafePut(SESSION_ID, sessionId);    }    @Override    public Serializable getSessionId() {        return getTypeValue(SESSION_ID, Serializable.class);    }    @Override    public void setAuthenticated(Boolean authc) {        nullSafePut(AUTHC, authc);    }    @Override    public Boolean isAuthenticated() {        return getTypeValue(AUTHC, Boolean.class);    }}

demo

package com.wjz.demo;import com.wjz.core.CustomSubjectContext;import com.wjz.core.DefaultCustomSubjectContext;public class CopyDemo {    public static void main(String[] args) {        CustomSubjectContext sctx = new DefaultCustomSubjectContext();        sctx.setSessionId("sctx 123456");        sctx.setAuthenticated(true);        System.out.println("sctx getSessionId :" + sctx.getSessionId());        System.out.println("sctx isAuthenticated :" + sctx.isAuthenticated());        System.out.println();        CustomSubjectContext copy = new DefaultCustomSubjectContext(sctx);        copy.setSessionId("copy 123456");        System.out.println("copy getSessionId :" + copy.getSessionId());        System.out.println("copy isAuthenticated :" + copy.isAuthenticated());    }}

 

转载于:https://www.cnblogs.com/BINGJJFLY/p/9101989.html

你可能感兴趣的文章
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
字典【Tire 模板】
查看>>
LeetCode:Median of Two Sorted Arrays
查看>>
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
Perl IO:IO重定向
查看>>
优化算法系列-模拟退火算法(1)——0-1背包问题
查看>>
转:基于用户投票的排名算法系列
查看>>
WSDL 详解
查看>>
01爬取豆瓣网电影数据进行numpy的练习
查看>>
WSDL测试webservice接口记录
查看>>
独家 | TensorFlow 2.0将把Eager Execution变为默认执行模式,你该转向动态计算图了...
查看>>
react + dva + ant架构后台管理系统(一)
查看>>
[转]ASP数组全集,多维数组和一维数组
查看>>