Dun*_*gor 13 java generics hamcrest jodatime
JodaTime有
public final class DateTime extends BaseDateTime {...}
Run Code Online (Sandbox Code Playgroud)
这是最直接的
public interface ReadableInstant extends Comparable<ReadableInstant>
Run Code Online (Sandbox Code Playgroud)
哈姆克雷斯特
public static <T extends java.lang.Comparable<T>> org.hamcrest.Matcher<? super T>
greaterThan(T value) {...}
Run Code Online (Sandbox Code Playgroud)
如果我试试
greaterThan(new DateTime());
Run Code Online (Sandbox Code Playgroud)
然后我得到一个编译错误(Eclipse提供了最多的线索)
类型为Matchers的泛型方法greaterThan(T)不适用于参数(DateTime).推断类型DateTime不是有界参数的有效替代>
我是否正确地认为签名本greaterThan应该是
public static <T extends java.lang.Comparable<? super T>> org.hamcrest.Matcher<? super T>
greaterThan(T value)
Run Code Online (Sandbox Code Playgroud)
?是否有一种方法可以将这些组合在一起而不是原始的铸造Comparable?
Jon*_*eet 16
是的,在我看来,这将是一个更好的签名.
您是否尝试过明确指定比较类型?
Matchers.<ReadableInstant>greaterThan(new DateTime());
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不相信你可以使用静态导入调用它并且还指定类型参数 - 但这可能不会太困难.
当然另一种方法是抛出论点:
greaterThan((ReadableInstant) new DateTime());
Run Code Online (Sandbox Code Playgroud)
我没有Hamcrest方便,但上面使用你给我的签名测试类型对我来说很好.