Does the Java compiler hallucinate?
private ButtonGroup groupButtons(AbstractButton... buttons) {
return groupButtons(() -> new ButtonGroup(), buttons);
}
private <BG extends ButtonGroup> BG groupButtons(Supplier<BG> buttonGroupSupplier, AbstractButton... buttons) {
return groupButtons(buttonGroupSupplier.get(), buttons);
}
private <BG extends ButtonGroup> BG groupButtons(BG buttonGroup, AbstractButton... buttons) {
for (AbstractButton button : buttons) {
buttonGroup.add(button);
}
return buttonGroup;
}
It doesn’t like the first call
Ambiguous method call.
Both groupButtons (Supplier, AbstractButton…) in FormItemTableEditDlg and
groupButtons(ButtonGroup, AbstractButton…) in FormItemTableEditDlg match
Nope, they don’t!
It’s clearly a lambda, not a javax.swing.ButtonGroup
(it’s not even an interface which is plain as day even at compile-time)
Yes, I can cast, but I don’t want to. It should be accepted by javac
as is
Why is it ambiguous to Java?
Java 8