Skip to content

Scala -> Java compatibility. Compiler can't choose most specific overloaded method #4775

Closed
scala/scala
#7680
@scabug

Description

@scabug

Java example:

// JavaClass.java
public class JavaClass {
  public static class Element {

  }

  public static <T extends Element> int foo(Element a, Class<T> b, boolean c, Class<? extends T>... d) {
    return 1;
  }

  public static <T extends Element> int foo(Element a, Class<? extends T> b, boolean c) {
    return 2;
  }

  public static <T extends Element> int foo(Element a, Class<? extends T>... b) {
    return 3;
  }

  public static <T extends Element> int foo(Element a, boolean b, Class<? extends T>... c) {
    return 4;
  }

  static {
    foo(new Element(), Element.class, false);
  }
}

Scala example:

// ScalaClass.scala
class ScalaClass {
  JavaClass.foo(new Element, classOf[Element], false)
}

Obviously two methods are applicable, but one of them is definetely more specific (which is without varargs).

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions