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 回答