Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从类对象列表中形成特征对象_Java_Scala_Traits_Scala Java Interop - Fatal编程技术网

Java 从类对象列表中形成特征对象

Java 从类对象列表中形成特征对象,java,scala,traits,scala-java-interop,Java,Scala,Traits,Scala Java Interop,我的目的是将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)) abstract

我的目的是将
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))
abstract class Bs(buffer:Iterator[Tse]) extends Bts{
}
我有scala文件
Bts
Ts
Tse

Bts.scala

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
}
object Tsr {
def mcall(sourceData: Iterator[Tse]) : Bts = { //Other calls}
}
Ts.scala

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
}
object Tsr {
def mcall(sourceData: Iterator[Tse]) : Bts = { //Other calls}
}
Tse.scala

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
}
object Tsr {
def mcall(sourceData: Iterator[Tse]) : Bts = { //Other calls}
}
因此,在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);
更新: Tsr.scala

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
}
object Tsr {
def mcall(sourceData: Iterator[Tse]) : Bts = { //Other calls}
}
更新: 我尝试在Bts中创建一个抽象类,然后尝试从Java访问它:

在Bts.scala中添加了以下内容:

    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))
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

您发布的示例是一堆相互不匹配的奇怪类名

思考我理解你想做什么,如果你少弄点乱,那真的很容易

此外,除非您真的知道自己在做什么,否则永远不要从源代码中引用任何包含$的内容。它是供编译器使用的

斯卡拉:

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)
  }
}
trait数据{
瓦尔富:Int
值栏:Int
}
case类DataCase(foo:Int,Bar:Int)扩展数据
对象测试{
def doSomething(it:Iterator[Data])={

对于(x)你能添加Bts类吗?Bts是我已经添加的一个特性。嗯,
Bts
不是
ArrayList[Tse]
。如果你这样做,你会得到一个
ClassCastException
。你可以更清楚地指定你想在最后一行实现什么?你想从Java创建一个
Bts
的实例吗?请注意,traits不能总是按照在Java中实现。最好是提供一个
ab从Java使用的抽象类
。我想把Tse对象的列表,即
tse1
tse2
tse3
tse4
放入
Bts
,这是整个故事的目的。稍后我将调用一些scala方法,其参数将是包含该列表的Bts对象。因为我没有找到任何c正确的scala方法可以将所有的
tse1
tse2
tse3
tse4
对象放入列表,然后放入
bts
。因此我将其放入并得到了
ClassCastException
。甚至可以从java将列表放入
bts
吗?我可以从scala中做同样的事情,但这里遇到了问题。请参阅我的更新。
mcall
方法将
Iterator[Tse]
作为参数,因此我需要从java类传递该参数,我认为这是迭代器中
Tse
对象的列表。此外,我还尝试创建了一个
抽象类
,并在java中使用,但运气不佳。