Scala中的Java泛型问号
我有一个带有Java签名的API,返回Scala中的Java泛型问号,java,scala,Java,Scala,我有一个带有Java签名的API,返回public Foo getFoo() 然后,当我试图使用Scala的API时,我正在抱怨? val fooValue:Foo[_] = API.getFoo() 我也会尝试使用任何 val fooValue:Foo[Any] = API.getFoo() 您知道如何在Scala中设置问号类型吗?下面的代码编译如下 Foo.java Foo[?]不是有效的Java语法 如果该方法是publicstaticfoo getFoo(),则可以像API.getF
public Foo getFoo()
然后,当我试图使用Scala的API时,我正在抱怨?
val fooValue:Foo[_] = API.getFoo()
我也会尝试使用任何
val fooValue:Foo[Any] = API.getFoo()
您知道如何在Scala中设置问号类型吗?下面的代码编译如下 Foo.java
Foo[?]
不是有效的Java语法
如果该方法是publicstaticfoo getFoo()
,则可以像API.getFoo()
那样调用它。如果它是public Foo getFoo()
,您可以像new API().getFoo()
一样调用它
Java中的问号(
?
)对应于Scala中的下划线()。编译器可以推断类型吗?编译器不能推断通配符类型吗?“IDE没有抱怨,但当我编译错误时,确切的错误消息是什么?并显示导致它的完整代码示例。您使用泛型T创建Foo类。在我的情况下,我不能让它成为泛型类型T编写类的定义Foo
。“不能使其成为泛型类型T”是什么意思?抱歉,是的,我们在类的定义中有Foo[T],但仍然不适用于我。请编写类的定义并编写编译错误。我修复了生成getFoo()的实例。asInstanceOf[Foo[Any]]
public class Foo<T> {
}
public class API {
public static Foo<?> getFoo() {
return null;
}
}
object App {
val fooValue: Foo[_] = API.getFoo()
}