2013-07-04 67 views
4

这里Java列表皈依错误发生Java程序转换为斯卡拉的互操作性问题

Scala代码

@SuppressWarnings("unchecked") 
    @Override 
    def getAllStudents():List[Student] = { 
    return getSession().createQuery("from Student where isDelete = 'false' ") 
    .list() **here error occured and that shows below ** 
    } 

这里我导入此声明,但没有改变

import scala.collection.JavaConverters._ 

错误 类型不匹配;实测值:java.util.List中在需要类型0 [0?]: scala.collection.immutable.List [com.model.domain.entity.Student]

Java代码

@SuppressWarnings("unchecked") 
    @Override 
    public List<Student> getAllStudents() { 
     return getSession().createQuery(
       "from Student where isDelete = 'false' ").list(); 
    } 
+0

你在哪里放置了'import scala.collection.JavaConverters._'? –

+0

@ om-nom-nom顶端的程序... –

回答

6

你自己的回答不正确。相反,如果要实现一个接口(或扩展一个类),它需要返回一个Java列表,你应该这样做:

def getAllStudents() : java.util.List[Student] = { 
    getSession().createQuery("from Student where isDelete = 'false' ") 
    .list() 
} 

如果这里需要Java的名单,那么你应该代替做

import scala.collection.JavaConverters._ 

def getAllStudents() : Seq[Student] = { 
    getSession().createQuery("from Student where isDelete = 'false' ") 
    .list().asScala 
} 
+0

你是对的..真的比... –

+3

值得一提的是,如果你使用'JavaConverters'来转换让我们说一个'java.util.List'到' Seq',然后返回到'java.util.List',它会记住原始列表并在稍后的转换中产生它。参见[JavaConverters的时间复杂度asScala方法](http://stackoverflow.com/q/8517636/1333025)。 –