如何将 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<?> 解决。