Java 我怎样才能在Hamcrest获得Matcher课程?

Java 我怎样才能在Hamcrest获得Matcher课程?,java,hamcrest,Java,Hamcrest,我有一个匹配者,我想让sue成为我拥有的对象是正确的类型。例如,一根长的或一根绳子 void expect(String xpath, Matcher matcher) { String actual = fromXpath(xpath); // convert actual into correct type for matcher assertThat(actual, matcher); } 我想要像Matcher.getType这样的方法。所以我可以做一些类似的事情

我有一个匹配者,我想让sue成为我拥有的对象是正确的类型。例如,一根长的或一根绳子

void expect(String xpath, Matcher matcher) { 
   String actual = fromXpath(xpath);
   // convert actual into correct type for matcher
   assertThat(actual, matcher);
}
我想要像
Matcher.getType
这样的方法。所以我可以做一些类似的事情

if (matcher.getType().equals(Long.class)) {
    long actual = Long.parseString(fromXpath(xpath));
}

但我一辈子都看不到如何获得matcher的类型。

Hamcrest的matcher界面不支持获取类型。泛型的类型信息将被擦除,并且在运行时不可用。因此,您必须创建自己的接口。但是,如果您从XPath获取的值是一个
字符串
,但它可能是一个
字符串
,可以解析为
,只需将所有内容匹配为
字符串

也就是说,当你改变时,你不会错过很多真正的问题:

assertThat(a, is("abc"));
assertThat(Long.parseLong(b), is(123L));
用于:

所以使用后者


(使用后者还将捕获一些错误,例如意外的前导零。)

您可能需要查看我认为您需要的是参数化类型信息。在你们使用Matcher的情况下,我不知道你们是否能做到。我想这就是Java中所谓的类型擦除,我错了吗?
assertThat(a, is("abc"));
assertThat(b, is("123"));