在Java中创建类型的通用实例

Omr*_*mri 8 java generics types interface instance

我有以下Java类

public class MyClass <T extends MyInterface> implements RowMapper<MyInterface>
Run Code Online (Sandbox Code Playgroud)

我正在实现以下方法:

@Override
public T mapRow(ResultSet rs, int arg1) throws SQLException {
Run Code Online (Sandbox Code Playgroud)

如何在该类上创建"T"类型的实例?

我试图定义T类类并使用"myInstance.newInstance()",但我无法定义它.将Class作为参数发送到方法并使用"newInstance()"方法可以工作,但我希望能够这样做,而不必将其作为参数传递.谢谢!

dce*_*chi 26

Java泛型是通过擦除实现的,这意味着在运行时不会有参数类型信息.你不会在运行时知道T类(没有这样的T.class).因此,您需要将Class对象作为方法参数传递,以便执行您想要的操作.


Dmi*_*sev 10

在将对象传递给泛型类/函数时,您将丢失有关类型的所有信息.

唯一的方法是将Class对象传递给构造函数\ function:

static class Gen <T>{

    private Class<T> mClass;

    public Gen(Class<T> cls){
        mClass = cls;
    }

    public T get(){
        try{
            return mClass.newInstance();
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
}

static class A{
    public String name = "A!";
}

public static void main(String[] args) {
    Gen<A> g = new Gen<A>(A.class);
    A a = g.get();
    System.out.println(a.name);
}
Run Code Online (Sandbox Code Playgroud)