Background
I once wrote this method:
private SortedSet createSortedSet() {
return new TreeSet();
}
It's supposed to be called like this:
Set set = createSortedSet();
This works fine (although I've seen in answers here when researching the current question that this is error-prone).
The current situation
Anyway, now I am writing the following code (in a class that extends javax.servlet.jsp.tagext.TagSupport):
private T evaluate(String expression) {
ExpressionEvaluator evaluator = pageContext.getExpressionEvaluator();
return evaluator.evaluate(expression, T, null, pageContext.getVariableResolver());
}
The purpose is to be able to call this like:
Integer width = evaluate(widthStr);
The code in my evaluate method obviously doesn't work. The second argument to evaluator.evaluate() is supposed to be a Class object. This leads me to:
My question
How can I get the Class of a generic (return) type? What should I write in place of T as the second argument to evaluate?
EDIT: Conclusion
Nicolas seems to be right, it can not be done and I need to pass the class as an argument to my method. The upside is that since his solution makes the argument parametrized on the generic type I get a compilation check on that argument.
解决方案
Unfortunately, you will certainly have to change your method to:
private T evaluate(Class clazz, String expression)
and then pass clazz as your second parameter. Not as short as you expected.