2014-03-19 34 views
0

我有一個匹配器,並且我想讓起訴我的對象是正確的類型。例如。長或字符串。我如何獲得Hamcrest的Matcher類?

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)); 
} 

但我看不到我的生活如何得到匹配。

+0

你可能想看看http://stackoverflow.com/questions/3403909/get-generic-type-運行時間爲 我認爲你所要求的是參數類型信息。在你匹配Matcher的情況下,我不知道你是否能夠做到。 –

+0

我認爲這就是Java中的Type Erasure,我錯了嗎?http://docs.oracle.com/javase/tutorial/java/generics/erasure.html – wliao

回答

0

如果你從fromXpath得到的值是一個String,但它可能是一個String可以解析爲long,只是比賽的一切作爲String

也就是說,當你改變你不會錯過許多實際的問題:

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

爲:

assertThat(a, is("abc")); 
assertThat(b, is("123")); 

所以使用後者。

(使用後者也將趕上了一些錯誤,如意外前導零。)

0

Hamcrest的匹配器接口不支持獲取類型。泛型的類型信息被刪除,並且在運行時不可用。因此你必須創建一個自己的界面。但是,如果沒有包裝它們,你就不能使用標準匹配器。