Mercurial > hg > Database > Christie
view src/main/java/christie/datagear/dg/DataGear.java @ 147:3ce77273d76b
update datagear add exception
author | akahori |
---|---|
date | Tue, 08 Jan 2019 11:43:13 +0900 |
parents | 31325aff1d8b |
children | 3bddbfd6ea02 |
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; } }