Java通用类型实例化

joh*_*les 0 java generics generic-programming

有很多像这样的问题,但它们似乎都没有具体回答我的问题.

你如何实例化一个新的T?

我有一个泛型方法,我需要在type参数中返回一个新类型的实例.这是我的代码......

class MyClass {

  public static MyClass fromInputStream( InputStream input ) throws IOException {

    // do some stuff, and return a new MyClass.

  }
}
Run Code Online (Sandbox Code Playgroud)

然后在一个单独的类我有一个像这样的通用方法...

class SomeOtherClass {

  public <T extends MyClass>download(URL url) throws IOException {

    URLConnection conn = url.openConnection();

    return T.fromInputStream( conn.getInputStream() );

  }
}
Run Code Online (Sandbox Code Playgroud)

我也试过以下......

class SomeOtherClass {

  public <T extends MyClass>download(URL url) throws IOException {

    URLConnection conn = url.openConnection();

    return new T( conn.getInputStream() ); // Note my MyClass constructor takes an InputStream...

  }
}
Run Code Online (Sandbox Code Playgroud)

但是上面的排列都不会编译!错误是:

File: {...}/SomeOtherClass.java
Error: Cannot find symbol
symbol : class fromInputStream
location : class MyClass
Run Code Online (Sandbox Code Playgroud)

任何建议,将不胜感激!

Joh*_*sen 6

我认为一种常见的方法是要求传递类型为T的类,如下所示:

class SomeOtherClass {

  public <T extends MyClass> T download(Class<T> clazz, URL url) throws IOException {

    URLConnection conn = url.openConnection();

    return clazz.getConstructor(InputStream.class).newInstance(conn.getInputStream() ); // Note my MyClass constructor takes an InputStream...

  }
}
Run Code Online (Sandbox Code Playgroud)