2

この VB.NET コードの Java バージョンを投稿できる人はいますか?

    Public Function FetchDoc(Of T As {New, IRepoDocument})(ByVal docId As String) As IRepoDocument Implements IDocRepository.FetchDoc

        Dim repoDoc As New T

        //some code to init repoDoc

        Return repoDoc

    End Function

この関数は、実装する任意のクラスのインスタンスを受け入れて作成し、IRepoDocument引数のないコンストラクターを持ちます。

私が見つけた唯一の方法は次のとおりです。

public <T extends IRepoDocument> IRepoDocument FetchDoc(String idDoc, Class<T> clazz)
    throws InstantiationException, IllegalAccessException 
{
  return clazz.newInstance();
}

Class<T> clazzしかし、入力パラメーターとして抑制したい。

4

1 に答える 1

2

匿名クラスを除いて、インスタンスがどのクラスであるかを指定するインスタンスなしでJavaでインスタンスを作成することはできませんClass(以下を参照)。そのクラスインスタンスをパラメータとして取得したり、岩の下に隠したり、海から釣り上げたりすることができますが、実行時に取得する必要があります。ジェネリックスに関連付けられているクラスは、型消去によって削除され、そこにはありません。

stringbeansのVB.NETはわかりませんが、場合によっては、匿名クラスを探している可能性があります。

new IRepoDocument() { ......fill in code };

この場合、何もありません<T>。戻り値のタイプはIRepoDocumentになります。

于 2012-04-17T12:42:27.420 に答える