我的目的是将Tse对象的列表放入Java中的Bts对象中。
Bts Object should contain List=
List(Tse(1285927200000,1285928100000,0.0),
Tse(1285928100000,1285929000000,1.0),
Tse(1285929000000,1285929900000,2.0),
Tse(1285929900000,1285930800000,3.0))我有scala文件Bts,Ts和Tse
Bts.scala
trait Bts extends Ts{
def start:Long
def end:Long
def timezone:TimeZone
}Ts.scala
Object Ts { //Some methods }
trait Ts extends Iterator[Tse] {
//Some methods
}Tse.scala
case class Tse(val start:Long, val end:Long, val value:Option[Double], val elapsed:Long) {
def this(start: java.lang.Long, end: java.lang.Long,
value: java.lang.Double) = {
this(start, end, Option(value), end-start)
}
//Some methods
}因此,在Java代码中,我希望使Bts对象包含以下内容:
List(Tse(1285927200000,1285928100000,0.0),
Tse(1285928100000,1285929000000,1.0),
Tse(1285929000000,1285929900000,2.0),
Tse(1285929900000,1285930800000,3.0))我的Java代码可以这样做:
Tse tse1= new Tse(1285927200000L, 1285928100000L, 0.0);
Tse tse2 = new Tse(1285928100000L, 1285929000000L, 1.0);
Tse tse3= new Tse(1285929000000L, 1285929900000L, 2.0);
Tse tse4 = new Tse(1285929900000L, 1285930800000L, 3.0);
List<Tse> entryList = new ArrayList<Tse>();
entryList.add(tse1);
entryList.add(tse2);
entryList.add(tse3);
entryList.add(tse4);
Bts bts= (Bts) entryList; //exception
Tsr$ tsr= Tsr$.MODULE$;
tsr.mcall(bts);正如你所看到的,最后一行给了我一个例外:
Caused by: java.lang.ClassCastException: java.util.ArrayList
cannot be cast to com.testapp.people.user.Bts更新:
Tsr.scala
object Tsr {
def mcall(sourceData: Iterator[Tse]) : Bts = { //Other calls}
}更新:
我尝试在Bts中创建一个抽象类,然后尝试从Java访问它:
在Bts.scala中添加了以下内容
abstract class Bs(buffer:Iterator[Tse]) extends Bts{
}来自java:
Iterator<Tse> iterator = entryList.iterator();
Bts bts= new Bs(scala.collection.JavaConversions$.MODULE$.
asScalaIterator(iterator)); //exception现在我得到了编译时错误,如下所示:
Cannot instantiate the type Bs发布于 2016-02-01 12:06:53
您发布的示例是一堆不匹配的奇怪类名。
我想,,我明白你想做什么,如果你不那么乱的话,这真的很容易。
此外,除非您真正知道自己在做什么,否则您永远不应该引用源代码中包含$的任何内容。编译器可以使用它。
Scala:
trait Data {
val foo: Int
val Bar: Int
}
case class DataCase(foo: Int, Bar: Int) extends Data
object Test {
def doSomething(it: Iterator[Data]) = {
for (x <- it) println(x)
}
}爪哇:
import scala.collection.JavaConversions;
import java.util.ArrayList;
import java.util.List;
public class TestJava {
public static void main(String[] args) {
List<Data> list = new ArrayList<>();
list.add(new DataCase(1, 2));
list.add(new DataCase(3, 4));
list.add(new DataCase(4, 5));
Test.doSomething(JavaConversions.asScalaIterator(list.iterator()));
}
}https://stackoverflow.com/questions/34652451
复制相似问题