0

重複の可能性:
ジェネリック型Tのクラスインスタンスを取得する方法

テンプレートのT

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 に答える