【发布时间】:2015-01-16 10:11:54
【问题描述】:
我正在编写一个应用程序,该应用程序的表单带有带数字的文本字段。为了检查输入是否有效,我决定使用 Hamcrest Matchers。我定义了:
public static <T> boolean checkThat(T actual, Matcher<? super T> matcher) {
return matcher.matches(actual);
}
这样我就可以使用以下内容:
if(checkThat(doubleFromText,greaterThan(0.0)) doSomething();
现在这在调试模式下工作得很好,但是当我为生产版本启用 proguard 时,应用程序立即崩溃并显示以下消息(通过回溯获得):
java.lang.Error: Cannot determine correct type for matchesSafely() method.
at org.hamcrest.internal.ReflectiveTypeFinder.findExpectedType(Unknown Source)
canObtainExpectedTypeFrom
at org.hamcrest.TypeSafeMatcher.<init>(Unknown Source)
at org.hamcrest.TypeSafeMatcher.<init>(Unknown Source)
at org.hamcrest.number.OrderingComparison.<init>(Unknown Source)
at org.hamcrest.number.OrderingComparison.greaterThan(Unknown Source)
matchesSafely
at org.hamcrest.Matchers.greaterThan(Unknown Source)
我该如何解决这个问题?
我做了一个小例子来演示这个问题:https://github.com/burgerga/HamcrestMatchersWithProguard
注意事项:
- 我将
-dontwarn java.beans.**添加到我的 proguard 规则中以使其编译。 -
在你开始告诉我应该使用
if(doubleFromText > 0)之前,我给出的示例已经过简化。在我的代码中,我使用类似checkThat(textIn(myEditText),parsesToDouble(greaterThan(0.0)));parsesToDouble是我写的一个简单的匹配器。我认为这是表达我意图的一种非常灵活和清晰的方式,我只是对如何让它与 proguard 一起工作感兴趣。
【问题讨论】:
标签: java android validation proguard hamcrest