- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
下面的测试类,通过。
class SimpleClassTest {
private inline fun <reified T> anyObject(): T {
return Mockito.anyObject<T>()
}
lateinit var simpleObject: SimpleClass
@Mock lateinit var injectedObject: InjectedClass
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
}
@Test
fun testSimpleFunction() {
simpleObject = SimpleClass(injectedObject)
simpleObject.simpleFunction()
verify(injectedObject).settingDependentObject(anyObject())
}
}
但是如果我们改变
private inline fun <reified T> anyObject(): T {
return Mockito.anyObject<T>()
}
到
private inline fun <reified T: Any> anyObject(): T {
return Mockito.anyObject<T>()
}
它会失败
java.lang.IllegalStateException: Mockito.anyObject<T>() must not be null
<reified T>
有什么不同?与 <reified T: Any>
在 Kotlin 中?
更新答案是 Any 是非空的,然后使用 <reified T: Any>
不应该返回错误,因为 settingDependentObject(...)
声明接收非空参数。我希望 <reified T>
相 react 该出错,但这与我的理解相反。
我理解错了吗?
最佳答案
作为 stated in the documentation和 the linked answer默认上限为 Any?
.换句话说,以下声明是等价的:
inline fun <reified T> anyObject(): T = Mockito.anyObject<T>()
inline fun <reified T:Any?> anyObject(): T = Mockito.anyObject<T>()
Mockito.anyObject<T>()
will return null
两个T:Any
和 T:Any?
.当返回类型为 T:Any
的方法时被调用 null
Mockito 返回的值未通过 Kotlin 编译器插入的运行时检查。你得到的错误是在 settingDependentObject
之前抛出的被调用。
关于mockito - <reified T> 和 <reified T : Any> in Kotlin? 有什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37381016/
下面的测试类,通过。 class SimpleClassTest { private inline fun anyObject(): T { return Mockito.a
我需要获取 lambda 函数实现的 AST。我被卡住了,因为 reify 对论点起作用,而不是对它的值(value)起作用。 val x = (a: Int) => println("a") val
基于 this comment关于具体化, It acts like @property, except that the function is only ever called once; aft
我有一些这样的代码: {-# LANGUAGE AllowAmbiguousTypes #-} module Foo where import Data.Proxy class Foo x y cla
当使用reify时在 Clojure 中,如何为构造函数提供表达式? 或者,如何将参数传递给基类构造函数? 最佳答案 您不能使用reify来子类化和实例化类——它仅适用于协议(protocol)和接口
我尝试阅读论文( http://www.ittc.ku.edu/csdl/fpg/sites/default/files/Gill-09-TypeSafeReification.pdf )并设法具体化
是否有可能做到 reify在 GHCi 中? 当我使用“runQ”尝试它时,它提示“无法在 IO monad 中进行具体化”。 >>> runQ (reify ''Bool) Template Has
为什么我们需要Control.Lens.Reified ?是否有某种原因导致我无法将 Lens 直接放入容器中? reify 到底是什么意思? 最佳答案 我们需要具体化的镜头,因为 Haskell 的
我正在尝试围绕如下所示的 Java API 编写 Clojure 层: public class Executor { public interface ExecutorJob { pub
我在 Pyramid tutorial for UX design 中看到了.我无法弄清楚这个装饰器到底是什么。 我看到其用法的示例代码。 def __init__(self, request):
我试图理解 reified 关键字的用途,显然是 it's allowing us to do reflection on generics . 但是,当我将其省略时,它也可以正常工作。任何人愿意解释
我一直在使用 Scala 宏,并在宏中包含以下代码: val fieldMemberType = fieldMember.typeSignatureIn(objectType) match {
为什么我应该在 clojure 中使用 Reify 而不是代理? 最佳答案 reify 的方法体是词法闭包,可以引用周围的局部作用域。 reify 与 proxy 的不同之处在于: 仅支持协议(pro
我编写了一些代码,以使用“DefineTypeGeneric”类检测类型模型数据。 主类 fun main() { val list = ArrayList() list.add("K
实际上,主要问题仍然是 Kotlin 中的类没有具体化的类型参数。但这就是为什么在这种特定情况下这困扰我的原因: 假设您有一个包装类 Wrapper接受一个字符串 content和一个类(class)
我在有关 haskell 和函数式编程的博客中读了很多这个术语(特别是 sigfpe's blog ),但我不知道它的含义。大多数时候我都不知道,但如果我知道的话,我可能会更好地理解这些文本。谷歌没有
我有一个仅发出事件的 java 接口(interface),我正在尝试在 Clojure 中实现它。 Java接口(interface)是这样的(现实中还有很多其他方法): public interf
我正在尝试编写一个断言函数来检查给定对象是否属于 T 类型: @UseExperimental(ExperimentalContracts::class) inline fun assertIsIn
我真的可以用你的帮助来解释这个功能。 我有一个包含 2 个字符串值、一个国家名称和一个货币的国家枚举。练习是使用 2 个字符串输入,检查枚举是否有国家,然后比较它们的货币,相应地返回 true 或 f
我正在寻找 -print 或 javap 的替代方案来了解编译器在 Scala 中执行的操作。有了新的反射/宏库,reify 似乎是一个很好的候选者,如 Retronym 的 macrocosm 所示
我是一名优秀的程序员,十分优秀!