Supongo que la máquina virtual de Java tiene pila y que también es posible obtener la "dirección" de una función. Si es así, entonces podría hacerse obteniendo la dirección de las funciones F2() y F3(). Luego, en F1(), se extrae la dirección del llamante de la pila y se vuelve a apilar para evitar problemas. Al menos en las máquinas "reales" puede hacerse.
[edit]En Pascal sería algo así:
Código Delphi
[-]
PROCEDURE F1;
VAR
DireccionFuncion: POINTER;
BEGIN
ASM
POP AX;
PUSH AX;
MOVE @DireccionFuncion, AX;
END;
IF (DireccionFuncion = POINTER (@F2)) THEN
BEGIN
...
END
ELSE IF (DireccionFuncion = POINTER (@F3)) THEN
BEGIN
...
END;
...
END;