大家好,最近在做一个项目的时候,在关于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.
    耐心等待中,虚心求教,谢谢各位指点下哦哦

解决方案 »

  1.   

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

  2.   

    那兄台的意思还是要根据不同的实例化对象类型具体处理?但反序列化的方法体感觉都是可以复用的,只需传入不同的XML,以及对应的Object类型就行了的,
    ps:我是这样做的,在上层它也是有不同的对象的反序列化方法,我直接在他上层处理的,根据调用的那种方法就给他写一个对象的底层的具体反序列化的实现,尽管有相似的代码,但是不多,但总觉得不太好。