如何Foo从Java 访问scala包对象中包含的对象?
package object domain { object Foo } domain$.MODULE$.Foo$.MODULE$
Run Code Online (Sandbox Code Playgroud) 为什么所有scala vararg方法,当从java中使用时,似乎接受Seq变量,并且不能用作java本机vararg方法.这是一个错误吗?
例如,Buffer有方法def append(elems: A*): Unit.但在java中它有另一个签名:void append(Seq<A>).
我在scala库类中有两个简单的方法:
class Foo {
def bar(args : String*) : Unit = println("Foo.bar with: " + args)
def bar(args : Array[String]) : Unit = bar(args.toSeq : _*)
}
Run Code Online (Sandbox Code Playgroud)
这一切都编译得很好.然后我把它放在一个库中foo.jar并尝试编译以下Java:
import Foo
public class Test {
public static void main(String[] args) {
Foo foo = new Foo();
foo.bar("Hello", "World"); //DOES NOT COMPILE
}
}
Run Code Online (Sandbox Code Playgroud)
我可以用以下内容替换违规行:
foo.bar(new String[] { "Hello", "World" }); //OK
Run Code Online (Sandbox Code Playgroud)
但这似乎打败了这一点.如何使用类似Java varargs的语法从Java调用它?
我正在尝试从Spark Dataframe中过滤出行.
val sequence = Seq(1,2,3,4,5)
df.filter(df("column").isin(sequence))
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到了一个不受支持的文字类型错误
java.lang.RuntimeException: Unsupported literal type class scala.collection.immutable.$colon$colon List(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
根据文档,它采用scala.collection.Seq列表
我想我不想要文字?然后我可以接受什么样的包装类呢?