有没有一个很好的理由为什么Pair<L,R>Java中没有?这个C++构造的等价物是什么?我宁愿避免重新实现自己.
似乎1.6提供类似的东西(AbstractMap.SimpleEntry<K,V>),但这看起来很复杂.
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?
我有以下片段:
Comparable<C> a = ...;
Comparable<C> b = ...;
Comparable<C> min = a.compareTo(b) <= 0 ? a : b;
Run Code Online (Sandbox Code Playgroud)
这类似于Math.min(a, b),但在上定义Comparable。
我知道三元运算符已经很短了,但是我无法内联aand 的表达式,b因此我认为是min(a, b)。max(a, b)更容易理解。
我知道有几个流响应。收集一组值的函数,例如:
Stream.of(a, b).min(Comparator.naturalOrder())
Run Code Online (Sandbox Code Playgroud)
这将有助于内联表达式,但是对于这样的小任务,我仍然觉得很难阅读并且开销太大。
目前,我正在使用自己的实用程序功能,但我很感兴趣:
如何以一种可读性和独立于库的方式找到两个可比对象中的最小值,而又没有太多的性能开销?
有谁知道如何使用泛型编写下面的代码并避免编译器警告?(@SuppressWarnings("未选中")被视为作弊).
并且,也许,通过泛型检查"左"的类型是否与"右"的类型相同?
public void assertLessOrEqual(Comparable left, Comparable right) {
if (left == null || right == null || (left.compareTo(right) > 0)) {
String msg = "["+left+"] is not less than ["+right+"]";
throw new RuntimeException("assertLessOrEqual: " + msg);
}
}
Run Code Online (Sandbox Code Playgroud)