首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从类对象列表中形成特征对象

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

Stack Overflow用户
提问于 2016-01-07 10:12:43
回答 1查看 160关注 0票数 0

我的目的是将Tse对象的列表放入Java中的Bts对象中。

代码语言:javascript
复制
    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

Bts.scala

代码语言:javascript
复制
trait Bts extends Ts{
  def start:Long
  def end:Long
  def timezone:TimeZone
}

Ts.scala

代码语言:javascript
复制
Object Ts { //Some methods }
trait Ts extends Iterator[Tse] {
  //Some methods
}

Tse.scala

代码语言:javascript
复制
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对象包含以下内容:

代码语言:javascript
复制
List(Tse(1285927200000,1285928100000,0.0), 
Tse(1285928100000,1285929000000,1.0), 
Tse(1285929000000,1285929900000,2.0), 
Tse(1285929900000,1285930800000,3.0))

我的Java代码可以这样做:

代码语言:javascript
复制
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);

正如你所看到的,最后一行给了我一个例外:

代码语言:javascript
复制
Caused by: java.lang.ClassCastException: java.util.ArrayList 
cannot be cast to com.testapp.people.user.Bts

更新:

Tsr.scala

代码语言:javascript
复制
object Tsr {
def mcall(sourceData: Iterator[Tse]) : Bts = { //Other calls}
}

更新:

我尝试在Bts中创建一个抽象类,然后尝试从Java访问它:

Bts.scala中添加了以下内容

代码语言:javascript
复制
abstract class Bs(buffer:Iterator[Tse]) extends Bts{
}

来自java:

代码语言:javascript
复制
Iterator<Tse> iterator = entryList.iterator();
Bts bts= new Bs(scala.collection.JavaConversions$.MODULE$.
asScalaIterator(iterator)); //exception

现在我得到了编译时错误,如下所示:

代码语言:javascript
复制
Cannot instantiate the type Bs
EN

回答 1

Stack Overflow用户

发布于 2016-02-01 12:06:53

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

我想,我明白你想做什么,如果你不那么乱的话,这真的很容易。

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

Scala:

代码语言:javascript
复制
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)
  }
}

爪哇:

代码语言:javascript
复制
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()));
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34652451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档