Mercurial > hg > Database > Christie
view src/main/java/christie/datagear/dg/DataGear.java @ 215:3bddbfd6ea02
fix command builder
author | akahori |
---|---|
date | Tue, 12 Mar 2019 21:51:14 +0900 |
parents | 3ce77273d76b |
children |
line wrap: on
line source
package christie.datagear.dg; import christie.datagear.WrapperClass; public class DataGear<T>{ protected T data = null; protected Class<T> clazz = null; public DataGear(T data) {//for normal setClazz(data.getClass()); setData(data); } /*public DataGear(T... dg) {//for input DataGear init @SuppressWarnings("unchecked") Class<T> type = (Class<T>) dg.getClass().getComponentType(); this.clazz = type; }*/ public DataGear(Class clazz){ setClazz(clazz); } public void setData(T data) { Class dataClazz = data.getClass(); if(dataClazz == this.clazz){ this.data = data; return; } // ここより下追加したけど, 遅くなりそう. Class dataSuperClazz = dataClazz.getSuperclass(); while (dataSuperClazz != null) { if(dataSuperClazz == this.clazz) { this.data = data; return; } dataSuperClazz = dataSuperClazz.getSuperclass(); } Class<?>[] interfaces = dataClazz.getInterfaces(); for (Class<?> interfaze : interfaces) { if(interfaze == this.clazz) { this.data = data; return; } } // ごめん. いい例外処理見つけられなかった. throw new ClassCastException("datagear cannot set class from " + dataClazz.getName() + " to " + clazz.getName()); } public void setClazz(Class clazz){ this.clazz = WrapperClass.getWrapperClass(clazz); }; public Class getClazz(){ return clazz; }; public T getData() { return data; } @Override public String toString() { return "DataGear : classname " + clazz; } }