使用泛型和@ annotation.varargs时编译错误(类型不匹配)

时间:2013-08-06 15:29:33

标签: scala variadic-functions scala-java-interop

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

有一个用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

那是什么?

0 个答案:

没有答案