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中使用,但运气不佳。