2017-09-27 45 views
0

在科特林,编写测试,我在建立阶段每个测试之前创建一个吉斯注射器,然后我尝试释放它在拆卸阶段:重新分配在科特林可变

class MyTestClass { 
    .... 
    var injector: Injector? = null 
    ... 
    @Before 
    fun setUp() { 
     ... 
     injector = Guice.createInjector(modules) 
     ... 
    } 
    @After 
    fun tearDown() { 
     ... 
     injector = null 
    } 

    @Test 
    fun myFirstTest() { 
     myInstance = injector?.getInstance(Key.get(MyClass::class.java)) 
     // use myInstance here 
     ... 
    } 
    ... 
} 

我的问题是在Kotlin的土地上,这样的释放是必要的吗?如果有必要,最好的办法是什么?

回答

2

不,这不是必要的,甚至不会被重新分配。你正在做的是重写injector为空。旧的价值依然在没有参考的情况下在记忆中出现。当垃圾收集器认为合适时,内存被垃圾收集器清理。

+0

嗯,有没有一种方法来构建代码,以便我可以确定注入器是从内存中清除的呢? – breezymri

+2

不是。这是JVM的设计决定。它为你管理记忆,并且通常相当擅长。试图颠覆它通常会导致严重的性能和内存问题。只要你确定完成了与资源的连接,你就不需要从内存中清除它。 (JVM在退出时也会清除它的内存,所以不要认为它会在你的测试完成后继续存在。) –