Java程序将scala转换为互操作性问题

Pra*_*A R 4 java scala scala-java-interop

这里发生java list convertion错误

Scala代码

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

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

import scala.collection.JavaConverters._
Run Code Online (Sandbox Code Playgroud)

错误 类型不匹配; 发现: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();
    }
Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 6

你自己的答案是不正确的.相反,如果要实现需要返回Java列表的接口(或扩展类),则应执行以下操作:

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

如果您没有在这里需要的Java名单,那么你应该做的,而不是

import scala.collection.JavaConverters._

def getAllStudents() : Seq[Student] = {
  getSession().createQuery("from Student where isDelete =  'false' ")
    .list().asScala
 }
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,如果你使用`JavaConverters`转换让我们说`java.util.List`到`seq`然后再回到`java.util.List`,它会记住原始列表并在以后产生它转换.请参阅[JavaConverters asScala方法的时间复杂度](http://stackoverflow.com/q/8517636/1333025). (3认同)