Java 如何返回作为参数显式传递的类型?

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&

我想将一个类型存储为参数,但当我返回它并在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<? 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”
。但是您的方法返回class
String
,即
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());