Irgendwann war das ja mal ein (hauptsächlich) Java-Forum. Und ich hänge gerade an etwas, wo ich entweder tierisch auf dem Schlauch stehe, oder ich irgendeine trickreiche Lösung übersehen habe.
Hier ist eine Klase, die eine Methode hat, die ein float
akzeptiert. Und eine Method Reference auf diese Methode kann an eine Funktion übergeben werden, die einen BiConsumer<Example, Byte>
erwartet:
import java.util.function.BiConsumer;
public class _TypedConsumerExample
{
static class Example
{
void setX(float x)
{
System.out.println("float " + x);
}
}
public static void main(String[] args)
{
doSomethingByte(Example::setX);
}
static void doSomethingByte(BiConsumer<Example, Byte> consumer)
{
}
}
Warum das möglich ist, kann man recht leicht begründen: Der Consumer akzeptiert ein Byte
, und das kann man über auto-unboxing in ein float
packen. (Der umgekehrte Fall, ein Float
a ein byte
zu geben, funktioniert entsprechend nicht).
Die Frage ist: Kann man ihn irgendwie auf den genauen (geboxten) Typ festpinnen? Ziel wäre, dass man dort nur eine set(byte)
Method reference übergeben kann, aber keine set(float)
…
Ich habe schon vesucht, einen expliziten Typ
interface ObjectByteConsumer<T> {
void accept(T object, byte b);
}
einzuführen, aber das hat nicht weitergeführt…