我撰写了一些 Java法,这部法律取决于某些Schala法(我也写过)。 如果将Schala编成2.8.0,但如果我使用2.9.1,则无法提供一种参数类型的论点,似乎正在发挥作用。
(简化) 具体法则大致如此:
package test
import collection.JavaConversions._
class SomeClass {
def foo(numbers: java.util.Set[Long]) {
numbers.foreach(println(_))
}
}
汇编了2.8和2.9.1汇编者。 Java法典就是这样:
package test;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class App {
public static void main(String[] args) {
new SomeClass().foo(new HashSet<Long>(Arrays.asList(1L, 2L, 3L)));
}
}
如果我把Schala编成2.8.0的汇编者,那么,Java将 compileppily(有1.6.0_26的汇编者)。 然而,如果我用2.9.1汇编Schala,那么 Java编者就错了:
testApp.java:16: foo(java.util.Set<java.lang.Object>) in test.SomeClass cannot be applied to (java.util.HashSet<java.lang.Long>)
sc.foo(new HashSet<Long>(Arrays.asList(1L, 2L, 3L)));
^
1 error
因此,尽管Schala 2.8.0在星号中保留了以下信息: number
is of categorySet<Long>
,但2.9.1 汇编成特代码,其中/code>为
Set<Object>
。
这难道是一种ug吗? 蓄意改变是否是不幸的(对我而言)副作用? (The Scala changelog 内提到“vach fixes in ......code>JavaConversions,用于更顺利地开展相互合作”。 如果是的话,我能做些什么来与2.9.1合作?