Using Ambiguous Methods
How to use methods that have the same signature?
In Java there is a distinction between primitive types and their wrappers. For instance, int is a primitive type and Integer is its wrapper. In Scala they are expressed by the same type: Int. Using ScalaFX classes that are parametrized with type corresponding to Java wrapper type, like Integer, can lead to compilation errors.
Assume here that we are using a ListView that contains Int items, so we will have
val listView = new ListView[Int] { ... }Consider method scrollTo. It has two variants scrollTo(Int index), that scrolls to item with given index, and scrollTo(T object), that scrolls to given item on the list. Since T is Int we have two methods with the same signature. If we try to use scrollTo:
listView.scrollTo(5)we will get compilation error:
Error:(160, 16) ambiguous reference to overloaded definition,
both method scrollTo in class ListView of type (o: Int)Unit
and method scrollTo in class ListView of type (index: Int)Unit
match argument types (Int)
listView.scrollTo(5)
^
A work around is to use parameter names to disambiguate between invocations:
listView.scrollTo(index = 5)Now the code will compile fine, and we will scroll by the list index (rather than item value).