[英]Forming object of trait from the list of objects of class
我的意圖是將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
:
斯卡拉
trait Bts extends Ts{
def start:Long
def end:Long
def timezone:TimeZone
}
斯卡拉
Object Ts { //Some methods }
trait Ts extends Iterator[Tse] {
//Some methods
}
斯卡拉
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
斯卡拉
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
您發布的示例完全是彼此不匹配的怪異類名。
我想我知道您要嘗試做的事情,而且如果您的混亂程度有所減少,這真的很容易。
另外,除非您真的知道自己在做什么,否則永遠不要從源代碼中引用任何包含$的東西。 可供編譯器使用。
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)
}
}
Java:
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()));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.