Java的泛型工厂

时间:2012-04-17 12:34:31

标签: java generics

任何人都可以发布这个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取消为输入参数。

1 个答案:

答案 0 :(得分:2)

如果没有Class实例来指定实例所属的类,则无法在Java中创建实例 - 除了匿名类(参见下文)。您可以将该类实例作为参数获取,或将其隐藏在岩石下,或将其从海洋中捕获,但您必须在运行时将其 。与泛型相关联的类将通过类型擦除删除,并且不存在。

我不知道来自stringbeans的VB.NET,但在某些情况下,您可能正在寻找一个匿名类。

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

在这种情况下,根本没有<T>,返回类型只是IRepoDocument。