簡體   English   中英

從類的對象列表中形成特征對象

[英]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文件BtsTsTse

斯卡拉

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM