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)