【发布时间】:2015-05-12 16:35:04
【问题描述】:
在 Java 8 中是否有任何类似 implements 关键字的方法?
假设我有一个功能接口:
@FunctionalInterface
interface LongHasher {
int hash(long x);
}
还有一个包含 3 个静态方法的库“实现”这个功能接口:
class LongHashes {
static int xorHash(long x) {
return (int)(x ^ (x >>> 32));
}
static int continuingHash(long x) {
return (int)(x + (x >>> 32));
}
static int randomHash(long x) {
return xorHash(x * 0x5DEECE66DL + 0xBL);
}
}
将来我希望能够互换地使用对这 3 种方法的任何引用作为参数。例如:
static LongHashMap createHashMap(LongHasher hasher) { ... }
...
public static void main(String[] args) {
LongHashMap map = createHashMap(LongHashes::randomHash);
...
}
如何在编译时确保LongHashes::xorHash、LongHashes::continuingHash 和LongHashes::randomHash 与LongHasher.hash(long x) 具有相同的签名?
【问题讨论】:
-
一个(不相关的)旁白:你的哈希函数看起来像
LongToIntFunction。 (我不确定是否应该引入与现有接口“结构上相同”的这种(新)接口 - 但也许给它一个 name 来暗示它会带来什么好处用于...)
标签: java java-8 functional-interface