0

可能重复:
如何获取泛型类型 T 的类实例

模板的 T at

JAXBContext jaxbContext = JAXBContext.newInstance(T.class);

无法编译 T.class ,是否需要反射以及如何?

    public void ConvertObjectToXML(String path, T bobject)
    {
        //Convert XML to Object
        File file = new File(path);
        JAXBContext jaxbContext = JAXBContext.newInstance(T.class);

        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        T customer2 = (T) jaxbUnmarshaller.unmarshal(file);
        System.out.println(customer2);
    }
4

1 回答 1

3

由于 Java 处理泛型类型的方式,此代码无法工作:

public class Factory<T>{
   public T create(){
      return T.class.newInstance();
   }
}

您需要将实际的泛型类型传递给构造函数(或任何其他方法):

public class Factory<T>
   Class<T> c;
   publict Factory(Class<T> c){
       this.c=c;
   }
   public T create(){
       return c.newInstance();
   }
}

经典的方法是从数组中推断出泛型类型,因为数组确实保存了它的类型:

public interface List<T>{
   ...
   T[] toArray(T[] target);
   ..
}

这是因为实际的运行时类型Factory<T>仅仅是Factory,因此运行时无法访问其泛型类型。

于 2012-10-26T08:46:58.670 回答