什么是Scala试图告诉我,我该如何解决这个问题? [required:java
发布时间:2020-12-16 18:54:09 所属栏目:安全 来源:网络整理
导读:我正在学习 Scala,今天我有信心将它介绍给我们的一个项目. 该应用程序执行了很多JPA / Hibernate的工作,我开始在Scala中实现一个Java接口.一切顺利,直到我试图将一些单元测试代码翻译成Scala. 我使用了很多Easymock,代码很自我解释.我想问题是,Scala不允许我
我正在学习
Scala,今天我有信心将它介绍给我们的一个项目.
该应用程序执行了很多JPA / Hibernate的工作,我开始在Scala中实现一个Java接口.一切顺利,直到我试图将一些单元测试代码翻译成Scala. 我使用了很多Easymock,代码很自我解释.我想问题是,Scala不允许我返回一个类型化的java.util.List,它需要一个无类型的java.util.List.不幸的是,我不知道如何让Scala转换为需要类型参数的东西. 说明/重现我的问题的代码: package some.package.name import java.util.ArrayList import java.util.List import javax.persistence.Query import org.easymock.EasyMock._ import org.junit.Assert._ import org.junit.Test class MyGreatScalaTest { @Test def testSomething() : Unit = { val mockQuery: Query = createMock(classOf[Query]) val mockResult: List[String] = new ArrayList[String] mockResult.add("great value") expect(mockQuery.getResultList).andReturn(mockResult) replay(mockQuery) assertEquals( (mockQuery.getResultList.asInstanceOf[List[String]]).get(0),"great value") verify(mockQuery) } } 这会产生以下编译器错误: [WARNING] found : java.util.List[String] [WARNING] required: java.util.List[?0] where type ?0 [WARNING] expect(mockQuery.getResultList).andReturn(mockResult) [WARNING] ^ 正如你所看到的,我需要mock来实现javax.persistence.Query的接口,它返回一个java.util.List. 解决方法
javax.persistence.Query#getResultList返回一个原始类型List,而不是像list [String]这样的* cooked8类型. Java在1.5版本中标准化了大部分标准库,但必须向后兼容为1.4编写的二进制文件和源代码.
Scala编译器容忍这些讨厌的类型,但将其转换为List [_],这是List [?0] forSome {type?0}的简写.这被称为存在类型,它意味着List的元素类型是某种特定类型,即使我们不确切知道哪一个! Easymock要求andReturn的参数与传递给期望的参数的类型相同,这是我们麻烦的存在类型. 我希望这可以解决问题: expect(mockQuery.getResultList.asInstanceOf[List[String]]).andReturn(mockResult) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |