Я намерен поместить список объектов Tse в объект Bts в Java:
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:
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
}
Итак, в коде 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{
}
Из джавы:
Iterator<Tse> iterator = entryList.iterator();
Bts bts= new Bs(scala.collection.JavaConversions$.MODULE$.
asScalaIterator(iterator)); //exception
Теперь я получаю ошибку времени компиляции как:
Cannot instantiate the type Bs
BtsнеArrayList[Tse]. Если вы разыграете это таким образом, неудивительно, что вы получитеClassCastException. Не могли бы вы уточнить, чего вы хотите добиться последней строкой? Вы хотите создать экземплярBtsиз Java? Обратите внимание, что трейты не всегда могут быть реализованы в Java в соответствии с этим вопросом а>. Вероятно, лучше всего было бы предоставитьabstract classдля использования с Java. - person 0__   schedule 07.01.2016tse1,tse2,tse3иtse4, вBts, что является всей целью истории. Позже я вызову какой-нибудь scala-метод, параметром которого будет этот объект bts, содержащий список. Поскольку я не нашел правильного способа scala, который мог бы поместить все объектыtse1,tse2,tse3иtse4в список, а затем вbts. Так что я разыграл его и получилClassCastException. - person My God   schedule 07.01.2016Btsиз java? Я могу сделать то же самое из scala, но здесь возникают проблемы. Смотрите мое обновление. МетодmcallпринимаетIterator[Tse]в качестве аргумента, поэтому мне нужно передать его из класса java, который, как мне кажется, представляет собой список объектовtseв итераторе. Также я безуспешно пытался создатьabstract classи использовать в java. - person My God   schedule 07.01.2016Bts:) - person My God   schedule 07.01.2016