在Java 8中是否有任何模擬implements
關鍵字的方法?如何在Java 8編譯時確保方法簽名「實現」功能接口
比方說,我有一個功能接口:
@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);
}
}
在未來,我希望能夠以交替方式使用這三種方法的任何參考作爲參數。例如:
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'。 (我不確定是否應該引入這樣一個(新的)與現有結構「結構相同」的接口 - 但也許在給它一個*名稱*中有一些好處,以表明它將用於什麼。 ) – Marco13