2017-09-27 40 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在退出時也會清除它的內存,所以不要認爲它會在你的測試完成後繼續存在。) –