Как установить имя класса в качестве параметра метода? - PullRequest
0 голосов
/ 17 февраля 2020

Я хотел бы отправить имя класса в качестве параметра метода. Я хотел бы использовать (выполнить) это так.

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"

Может быть, есть другие классы, если я импортирую вместо apache .poi. Но какой? Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Если вы используете T в методе уровня класса , вы должны сначала определить его в определении класса / метода, если только "T" неизвестно.

public class MainClass<T> extends Parent
{...}

или

public <T> String getTheMostFrequentType(Class<T> orderClass)
{...}

Другой вариант - не указывать c тип Т с пометкой "?" в твоем случае я думаю, что это лучшее решение

СОВЕТ : Лучше не делать код сложным с generi c, если он действительно не нужен.

вот так:

public String getTheMostFrequentType(Class<?> orderClass)
{...}
0 голосов
/ 17 февраля 2020

Как указано в комментариях, проблема была вызвана не объявлением параметра типа T, а импортом фактического типа T.

Проблема была решена путем замены Class<T> на Class<?> .

...