我想将类型存储为参数,但是当我返回它并在 JUnit 测试中签入时,我得到类似
Expected: an instance of Java.lang.String
but: <class java.lang.String> is a java.lang.class
这是该类的最小化示例...
public class ContextVariableResult<T> {
private Class<T> type;
public ContextVariableResult(Class<T> type) {
this.type = type;
}
//TODO doesn't work
public Class<T> getType() {
return type;
}
}
我将String.class作为构造函数参数传递。
我的测试看起来像这样......
assertThat(result.getType(), instanceOf(String.class));
我认为我的 hamcrest 匹配器是错误的,但由于编译错误,我不能使用is(String.class)或isA(String.class) :
The method assertThat(T, Matcher<? super T>) in the type Assert is not applicable for the arguments (Class<capture#3-of ?>,
Matcher<String>)
我已经尝试返回反射对象Type,我也尝试强制转换为ParameterizedType,但后来我得到了 ClassCastExceptions 等等。
我希望方法结果是“字符串”。我做错了什么?如果我不需要传递参数"String.class"会好得多,但是我想我总是会遇到类型擦除问题。