我有一个带有Java签名且返回public Foo<?> getFoo()的API

然后,当我尝试从Scala使用该API时,抱怨的是?

val fooValue:Foo[_] = API.getFoo()


我也尝试任何

val fooValue:Foo[Any] = API.getFoo()


任何想法如何在Scala中设置问号类型

最佳答案

以下代码编译

Foo.java

public class Foo<T> {
}


API.java

public class API {
    public static Foo<?> getFoo() {
        return null;
    }
}


App.scala

object App {
  val fooValue: Foo[_] = API.getFoo()
}


Foo[?]是无效的Java语法。

如果方法是public static Foo<?> getFoo(),则可以像API.getFoo()一样调用它。如果是public Foo<?> getFoo(),则可以像new API().getFoo()一样调用它。

Java中的问号(?)对应于Scala中的下划线(_)。

10-01 13:37