private Object getSet(PBDeserializer deserializer, Type type, Object[] extraParams) { Object set; if (isInterface(extraParams)) { set = getActualTypeObjectWhileInterface(deserializer); } else { set = createSet(type); } int size = 0; try { size = deserializer.scanNaturalInt(); } catch (Exception e) { e.printStackTrace(); } deserializer.addToObjectIndexMap(set, this); Class componentClazz; if (extraParams == null || extraParams.length == 0) { componentClazz = Object.class; } else { componentClazz = (Class) extraParams[0]; } if (componentClazz == Object.class) { // 选择性写入类名(Object) getObjectElement(deserializer, set, size); } else { // 都不写(Generic) getElementWithGerenic(deserializer, set, componentClazz, size); } return set; }
@Override public <T> T deserialize( PBDeserializer deserializer, Type type, boolean needConfirmExist, Object... extraParams) { if (needConfirmExist) { // 作为属性 try { if (deserializer.isObjectExist()) { return (T) getSet(deserializer, type, extraParams); } else { return (T) deserializer.getReference(); } } catch (Exception ex) { ex.printStackTrace(); } } else { // 直接序列化 return (T) getSet(deserializer, type, extraParams); } return null; }
private Object getActualTypeObjectWhileInterface(PBDeserializer deserializer) { Object set; int type = deserializer.scanType(); if (type == com.jd.dd.glowworm.asm.Type.COLLECTION_HASHSET) { set = new HashSet(); } else if (type == com.jd.dd.glowworm.asm.Type.COLLECTION_TREESET) { set = new HashSet(); } else { throw new PBException("不支持这种Set类型!"); } return set; }