A co třeba tohle?
val foo = (cond) ? new Foo() : new Bar();
foo.method();
Jak v takovém případě zafunguje inference? Bude hledat společná rozhraní obou tříd?
A co bys tak rekl? Jaky typ ma tenhle vyraz (cond) ? new Foo() : new Bar();? Nehledej slozitost, kde neni. Nebo se to alespon douc.
Tak já bych řekl, že buď vezme největší společný rozhraní, nebo spíš chcípne, protože je to otevřené. (Ale čerpám na základě zkušeností z Haskellu, Java tu interferenci nemá.)
Ale když by se to napsalo takhle:
void foo(Bool cond) {
val foo = (cond) ? new Foo() : new Bar();
foo.method();
}
Tak má všechny potřebné informace co potřebuje, a mohlo by to projít. (Když by to uměla.)