Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将类名设置为方法';s参数?_Java_Class_Generics_Reflection_Annotations - Fatal编程技术网

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)
{...}