1

// 我根据新的问题状态更改了标题。它的当前状态在最后一段中描述

有一个用 Scala 编写的项目提供 Java API,并且有一种解决方法可以让 Java 的 varargs 在用 Scala 编写的核心中使用。就像这样:

// Java code:
varargsMethod(arg1, arg2, ..., argN);

ClassUsingVarargs它是扩展 Java 类的 Scala 类的方法JavaClassUsingVarargs,其中实现了以下解决方法(过于简化):

public class JavaClassUsingVarargs {
    public ArgClass varargsMethod(ArgClass... args) {
        varargsMethod(Arrays.asList(args)); 
    }
    public abstract ArgClass varargsMethod(List<ArgClass> args) {
        doSomething(args);
    }

}

在核心(Scala)中,它是扩展的,并且在转换List可变参数时执行操作。这个多一层对我来说似乎不自然和多余,但我想不出更好的主意。基本问题是,如果我写(直接在 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

那是什么?

4

0 回答 0