Auto-unboxing bei method references vermeiden

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…

OK, mit
static <U extends Byte> void doSomethingByte(BiConsumer<Example, U> consumer)
scheint es sich erstmal wie gewünscht zu verhalten (muss noch genauer schauen), aber das extends Byte generiert erstmal eine Warnung (weil Byte eben final ist), und… es sieht komisch aus :face_with_diagonal_mouth: