Java 如何将类名设置为方法';s参数?
我想发送一个类名作为方法的参数。我想这样使用(执行)它Java 如何将类名设置为方法';s参数?,java,class,generics,reflection,annotations,Java,Class,Generics,Reflection,Annotations,我想发送一个类名作为方法的参数。我想这样使用(执行)它 orderDao.getTheMostFrequentType(EmployeeOrder.class); 我有这个密码 @Override public String getTheMostFrequentType(Class<T> orderClass){ String tableName = orderClass.getAnnotation(Table.class).name(); String sqlQu
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;
}
可能我应该导入另一个类而不是apache.poi。但是哪一个呢?我做错了什么?如果在类级别的方法中使用T,则必须在类/方法定义中首先定义它,除非“T”未知
public class MainClass<T> extends Parent
{...}
public类MainClass扩展父类
{...}
或
公共字符串getTheMostFrequentType(类orderClass)
{...}
另一个选项是不使用“”标记定义特定类型的T
对你来说,我认为这是更好的解决办法
提示:最好不要让泛型代码变得复杂,如果它不是真的复杂的话
需要
就像这样:
public String getTheMostFrequentType(Class<?> orderClass)
{...}
公共字符串getTheMostFrequentType(类orderClass)
{...}
正如评论中所建议的,问题是由于没有声明类型参数T
,而是导入了实际类型T
通过将
Class
替换为Class
这是什么T
?为什么它来自apache.poi?什么是orderClass
意味着泛型类型。检查您的导入语句。您的类在这里并不意味着泛型,因为您似乎从apache库-->org.apache.poi.ss.formula.functions.t
导入了一个名为t
的类。我认为这是因为您的类没有定义t
(我们也可以看到您的方法)。为了解决这个问题,您按照IDE的建议导入了一个已知的T
类。为什么必须在类定义中首先定义它?中允许使用非静态泛型方法Java@Holger-这只是一个例子,我同意在这种情况下不需要泛型,他可以使用“?”
public <T> String getTheMostFrequentType(Class<T> orderClass)
{...}
public String getTheMostFrequentType(Class<?> orderClass)
{...}