Java 如何返回作为参数显式传递的类型?
我想将一个类型存储为参数,但当我返回它并在JUnit测试中签入时,我得到如下结果Java 如何返回作为参数显式传递的类型?,java,generics,types,hamcrest,Java,Generics,Types,Hamcrest,我想将一个类型存储为参数,但当我返回它并在JUnit测试中签入时,我得到如下结果 Expected: an instance of Java.lang.String but: <class java.lang.String> is a java.lang.class 我认为我的hamcrest matcher是错误的,但由于编译错误,我不能使用is(String.class)或isA(String.class): The method assertThat(T, Matcher&
Expected: an instance of Java.lang.String
but: <class java.lang.String> is a java.lang.class
我认为我的hamcrest matcher是错误的,但由于编译错误,我不能使用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>)
方法断言(T,Matcher,
匹配器)
我已经尝试返回反射对象类型,我也尝试强制转换为参数化类型,但随后我得到了ClassCastException等等
我希望方法结果为“String”。我做错了什么?如果我不需要传递参数“String.class”就更好了,但是我想我总是会遇到类型擦除问题。您编写的类很好。您的测试不正确,因为
类
不是字符串
的实例。更改断言:
assertThat(result.getType(), is(String.class));
// or
assertEquals(String.class, result.getType());
您正在检查返回值是否为字符串的实例,例如
“hello”
。但是您的方法返回classString
,即String.class
我猜你的方法会返回你想要的。在这种情况下,您甚至不必使用
hamecrest
进行验证。常规的JUnit
的Assert.assertEquals(String.class,result.getType())
将适用于您。assertEquals有效,但当我尝试使用第一个时,Eclipse告诉我方法assertThat(T,Matcher,Matcher)
The method assertThat(T, Matcher<? super T>) in the type Assert is not applicable for the arguments (Class<capture#3-of ?>,
Matcher<String>)
assertThat(result.getType(), is(String.class));
// or
assertEquals(String.class, result.getType());