日期:2014-05-20  浏览次数:20635 次

在实际开发中遇到的一个纠结问题,不知是设计的问题还是~~~~
大家好,最近在做一个项目的时候,在关于XML序列化和反序列化的时候,遇到了几个问题,想了很久,但是一直没有头绪,不知道boss给的设计有没有问题。
  现在的情况是这样的:
  1.关于ObjectSerializeHelper类得声明
  public class ObjectSerializeHelper<T> {
public ObjectSerializeHelper() {
}

public T deserialize(String xml ) {
return null;
};
  }
  2. 类实例化
  ObjectSerializeHelper<SXRenderArgument> serHelper = new ObjectSerializeHelper<SXRenderArgument>();  
  3.调用ObjectSerializeHelper的方法 deserialize(String xml)方法 
  (SXRenderArgument ) serHelpr.deserialize(String xml);
  是通过强制转化将T转化为SXRenderArgument 类型 。 

  ---------------------------------
  现在的我所要做的就是实现 
  public T deserialize(String xml ) {
return null;
};
  可以利用的是一个关于序列化的方法,而这个方法被boss写好了 ,例如
  public static Object deserializeStringByJavax(String xmlString,
java.lang.Class... classType) { .....return object; } 

  我的问题有两个:
  1.在实现deserialize的时候调用了 deserializeStringByJavax;那么deserializeStringByJavax方法参数形式怎么传呢?
  2:在deserialize中的处理时,怎样得到实例化的对象类型,难道根据不同的对象类型就像不同的处理?
  或者可不可以直接写个通用的方法,直接根据T得到实例化的类型,用一个通用的引用,交给deserializeStringByJavax处理,最终得到和实例化的类型匹配的对象。例如此时根据deserialize处理后,就得到一个和xml对应的SXRenderArgument 类型的pojo.
  耐心等待中,虚心求教,谢谢各位指点下哦哦


------解决方案--------------------
把public T deserialize(String xml ) 改成 
public T deserialize(String xml, class<T> clazz ) {
return (T) deserializeStringByJavax(xml, clazz);
}
否则你没法得到T的class的,你可以通过Class的getParamenterType得到一个泛型参数T,但是得不到具体实例化时的泛型SXRenderArgument,所以最好是自己在参数传进来。