//我根据新的问题状态更改了标题。它的当前状态在最后一段描述
有一个用Scala编写的项目提供了Java API,并且有一种解决方法可以让Java的varargs用在Scala编写的核心中。就像这样:
// Java code:
varargsMethod(arg1, arg2, ..., argN);
这是Scala类ClassUsingVarargs
的一种方法,它扩展了Java类JavaClassUsingVarargs
,实现了以下解决方法(过度简化):
public class JavaClassUsingVarargs {
public ArgClass varargsMethod(ArgClass... args) {
varargsMethod(Arrays.asList(args));
}
public abstract ArgClass varargsMethod(List<ArgClass> args) {
doSomething(args);
}
}
在核心(Scala)中,它被扩展并且对已转换的List
varargs执行操作。这个多层次对我来说似乎不自然和多余,但我无法更好地了解。基本问题是,如果我(直接在Scala中)写varargsMethod(x: ArgClass*)
,它的类型是Seq
,但是来自Java API的是Array
/ List
。
有没有直观的方法呢?
重要更新
我发现了@annotation.varargs
,但问题是我的方法是泛型,当我添加该注释时,我得到编译错误:
[error] (core/compile:compile) scala.tools.nsc.symtab.Types$TypeError: type mismatch;
[error] found : Seq[my.api.java.MyParametrizedType[(some other)T(in method doSmth)]]
[error] required: Seq[my.api.java.MyParametrizedType[T(in method doSmth)]]
[error] Total time: 13 s, completed Aug 6, 2013 7:16:26 PM
那是什么?