docs.oracle.com/javase/tutorial/java/generics/erasure.html

однажды написал этот метод:

Он должен называться так:

private <T> SortedSet<T> createSortedSet() {
  return new TreeSet<T>();
}

Это работает хорошо (хотя я видел в ответах здесь, исследуя текущий вопрос, что это подвержено ошибкам).

Set<String> set = createSortedSet();

Текущая ситуация

Во всяком случае, сейчас я пишу следующий код (в классе, который расширяет javax.servlet.jsp.tagext.TagSupport):

Цель состоит в том, чтобы быть в состоянии назвать это как:

private <T> T evaluate(String expression) {
  ExpressionEvaluator evaluator = pageContext.getExpressionEvaluator();
  return evaluator.evaluate(expression, T, null, pageContext.getVariableResolver());
}

Код в моем методе оценки, очевидно, не работает. Второй аргумент

Integer width = evaluate(widthStr);

 должен быть объектом класса. Это приводит меня к:evaluator.evaluate()Мой вопрос

Как я могу получить класс универсального (возвращаемого) типа? Что я должен написать вместо T в качестве второго аргумента для оценки?

РЕДАКТИРОВАТЬ: Заключение

Николас, кажется, прав, это невозможно, и мне нужно передать класс в качестве аргумента моего метода. Плюс в том, что, поскольку его решение делает параметризованный аргумент для универсального типа, я получаю проверку компиляции по этому аргументу.

К сожалению, вам, безусловно, придется изменить свой метод на:

Ответы на вопрос(1)

Ваш ответ на вопрос