Given
class X
class Y extends X
object Ambiguous {
  def f(x: X) = 1
  def f(ys: Y*) = 2
}scala> Ambiguous.f(new X)
res2: Int = 1
scala> Ambiguous.f(new Y)
<console>:8: error: ambiguous reference to overloaded definition,
both method f in object Ambiguous of type (ys: Y*)Int
and  method f in object Ambiguous of type (x: X)Int
match argument types (Y)
       Ambiguous.f(new Y)But the corresponding Java program works compiles:
edit: as pointed out by andrew (comment below), javac picks the first alternative in both cases.
public class AmbiguousJ {
    static int f(X x) { return 1; }
    static int f(Y... y) { return 2; }
    public static void main(String[] args) {
        System.out.println(f(new X()));
        System.out.println(f(new Y()));
    }
}prints (when running):
(Assuming that X.class and Y.class already exist from compiling the Scala example.)
This is a PITA because X and Y, in my case, are JPA APIs, which I use a lot.