如何将 class 名称设置为方法的参数?
How to set a class Name as a method's parameter?
我想发送一个 class 名称作为方法的参数。我想像那样使用(执行)它。
orderDao.getTheMostFrequentType(EmployeeOrder.class);
我有这个代码
@Override
public String getTheMostFrequentType(Class<T> orderClass){
String tableName = orderClass.getAnnotation(Table.class).name();
String sqlQuery = "SELECT STATS_MODE(signed_by_id) FROM " + tableName;
String result = (String)getSessionFactory().getCurrentSession().createSQLQuery(sqlQuery).uniqueResult();
return result;
}
但是执行尝试给了我:
getTheMostFrequentType("org.apache.poi.ss.formula.functions.T") method cannot be applied in "java.lang.entities.EmployeeOrder"
可能我应该导入另一个 classes 而不是 apache.poi。但是哪一个?我做错了什么?
如果在class级别的方法中使用T,必须先在class/方法定义中定义,除非"T" 未知。
public class MainClass<T> extends Parent
{...}
或
public <T> String getTheMostFrequentType(Class<T> orderClass)
{...}
另一个选项是不定义带有标记“?”的特定类型的 T。
在你的情况下,我认为这是更好的解决方案
TIP: Better to not make code complex with generic if it's not really
needed.
像那样:
public String getTheMostFrequentType(Class<?> orderClass)
{...}
如评论中所述,问题是由于未声明类型参数 T
而导入了实际类型 T
.
问题已通过将 Class<T>
替换为 Class<?>
解决。
我想发送一个 class 名称作为方法的参数。我想像那样使用(执行)它。
orderDao.getTheMostFrequentType(EmployeeOrder.class);
我有这个代码
@Override
public String getTheMostFrequentType(Class<T> orderClass){
String tableName = orderClass.getAnnotation(Table.class).name();
String sqlQuery = "SELECT STATS_MODE(signed_by_id) FROM " + tableName;
String result = (String)getSessionFactory().getCurrentSession().createSQLQuery(sqlQuery).uniqueResult();
return result;
}
但是执行尝试给了我:
getTheMostFrequentType("org.apache.poi.ss.formula.functions.T") method cannot be applied in "java.lang.entities.EmployeeOrder"
可能我应该导入另一个 classes 而不是 apache.poi。但是哪一个?我做错了什么?
如果在class级别的方法中使用T,必须先在class/方法定义中定义,除非"T" 未知。
public class MainClass<T> extends Parent
{...}
或
public <T> String getTheMostFrequentType(Class<T> orderClass)
{...}
另一个选项是不定义带有标记“?”的特定类型的 T。 在你的情况下,我认为这是更好的解决方案
TIP: Better to not make code complex with generic if it's not really needed.
像那样:
public String getTheMostFrequentType(Class<?> orderClass)
{...}
如评论中所述,问题是由于未声明类型参数 T
而导入了实际类型 T
.
问题已通过将 Class<T>
替换为 Class<?>
解决。