Cómo garantizar en tiempo de compilación Java 8 que una firma de método "implemente" una interfaz funcional
¿Hay en Java 8 algún análogo paraimplements
palabra clave para los métodos?
Digamos que tengo una interfaz funcional:
@FunctionalInterface
interface LongHasher {
int hash(long x);
}
Y una biblioteca de 3 métodos estáticos."implementar" Esta interfaz funcional:
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);
}
}
En el futuro quiero poder usar indistintamente cualquiera de las referencias a estos 3 métodos como parámetro. Por ejemplo:
static LongHashMap createHashMap(LongHasher hasher) { ... }
...
public static void main(String[] args) {
LongHashMap map = createHashMap(LongHashes::randomHash);
...
}
¿Cómo puedo asegurar en tiempo de compilación queLongHashes::xorHash
, LongHashes::continuingHash
yLongHashes::randomHash
tener la misma firma queLongHasher.hash(long x)
?