使用通用 class 作为 java 列表的类型
Using a generic class as a type of java List
我想创建以下方法:
@Override
public List<?> listerUser( Class<?> nomClass ) throws GestionExceptionsDAO {
Object tableSQL;
try {
tableSQL = nomClass.newInstance();
} catch ( InstantiationException e1 ) {
e1.printStackTrace();
} catch ( IllegalAccessException e1 ) {
e1.printStackTrace();
}
List<tableSQL> listeUser;//Error : tableSQL cannot be resolved to a type
Session session = sessionFactory.openSession();
session.beginTransaction();
Query requete = session.createQuery( REQUETE_LIST );
requete.setParameter( REQUETE_LIST, tableSQL );
try {
listeUser = (List<tableSQL>) requete.getResultList();
} catch ( NoResultException e ) {
throw null;
} catch ( Exception e ) {
throw new GestionExceptionsDAO( e );
} finally {
session.close();
}
return listeUser;
}
我尝试做的是创建一个方法,该方法接收参数 class 名称和 returns class 的对象列表。我认为这很简单,但我发现做起来有些困难。非常感谢。
您可以在参数类型和返回的类型对象中使用相同的通用参数化类型:
public <T> List<T> listerUser( Class<T> nomClass ) throws GestionExceptionsDAO
之后就可以这样调用了:
List<String> listerUser = listerUser(String.class);
您不能使用对实例变量的引用来参数化泛型类型。
您可能正在寻找的成语是通用方法的成语,即 returns 一个 List
参数化为给定 Class
参数的类型:
public <T>List<T> listerUser(Class<T> nomClass) {
List<T> result = new ArrayList<>();
// TODO populate the result based on your query
return result;
}
您还可以使用 extends
或 [=17= 将 T
绑定到给定 class / 接口(包括 upper/lower 边界)的子级或父级] 关键字。
例如,给定以下定义:
public <T extends CharSequence>List<T> listerUser( Class<T> nomClass )
调用可以是:
List<String> list = listerUser(String.class);
备注
- 泛型方法文档here。
- 如果您计划使用反射来初始化
T
的新实例(例如 T t = nomClass.newInstance();
),您需要抛出或处理 IllegalAccessException
和 InstantiationException
我想创建以下方法:
@Override
public List<?> listerUser( Class<?> nomClass ) throws GestionExceptionsDAO {
Object tableSQL;
try {
tableSQL = nomClass.newInstance();
} catch ( InstantiationException e1 ) {
e1.printStackTrace();
} catch ( IllegalAccessException e1 ) {
e1.printStackTrace();
}
List<tableSQL> listeUser;//Error : tableSQL cannot be resolved to a type
Session session = sessionFactory.openSession();
session.beginTransaction();
Query requete = session.createQuery( REQUETE_LIST );
requete.setParameter( REQUETE_LIST, tableSQL );
try {
listeUser = (List<tableSQL>) requete.getResultList();
} catch ( NoResultException e ) {
throw null;
} catch ( Exception e ) {
throw new GestionExceptionsDAO( e );
} finally {
session.close();
}
return listeUser;
}
我尝试做的是创建一个方法,该方法接收参数 class 名称和 returns class 的对象列表。我认为这很简单,但我发现做起来有些困难。非常感谢。
您可以在参数类型和返回的类型对象中使用相同的通用参数化类型:
public <T> List<T> listerUser( Class<T> nomClass ) throws GestionExceptionsDAO
之后就可以这样调用了:
List<String> listerUser = listerUser(String.class);
您不能使用对实例变量的引用来参数化泛型类型。
您可能正在寻找的成语是通用方法的成语,即 returns 一个 List
参数化为给定 Class
参数的类型:
public <T>List<T> listerUser(Class<T> nomClass) {
List<T> result = new ArrayList<>();
// TODO populate the result based on your query
return result;
}
您还可以使用 extends
或 [=17= 将 T
绑定到给定 class / 接口(包括 upper/lower 边界)的子级或父级] 关键字。
例如,给定以下定义:
public <T extends CharSequence>List<T> listerUser( Class<T> nomClass )
调用可以是:
List<String> list = listerUser(String.class);
备注
- 泛型方法文档here。
- 如果您计划使用反射来初始化
T
的新实例(例如T t = nomClass.newInstance();
),您需要抛出或处理IllegalAccessException
和InstantiationException