2017-08-04 70 views
2

初始化我在科特林下面的類:科特林懶財產取決於另一個屬性在初始化

class Example { 
    val name: String 

    val lazyVar: String by lazy { 
     name + " something else" 
    } 

    init { 
     name = "StackOverflow" 
    } 
} 

我收到以下錯誤,當我使用namelazyVar(即使name懶惰初始化塊被初始化在init塊):

變量 '姓名' 必須被初始化

一種解決方案是初始化變量在另一種方法中:

class Example { 
    val name: String 

    val lazyVar: String by lazy { 
     initLazyVar() 
    } 

    init { 
     name = "StackOverflow" 
    } 

    private fun initLazyVar(): String { 
     return name + " something else" 
    } 
} 

這種技術的工作,但是沒有一種方法能保持內聯懶惰塊而不是依賴於外部函數的密實度?

+0

嘗試首先在調用init lazyVar –

回答

3

嘗試

class Example { 
    val name: String 

    init { 
     name = "StackOverflow" 
    } 

    val lazyVar: String by lazy { 
     name + " something else" 
    } 
} 
+0

哇之前,即工作,由於改變了安排! 我想知道爲什麼。這是一個錯誤還是聲明的順序? – fstephany

+0

的確,在評估延遲塊之前,必須評估該名稱。 – maciekjanusz

+0

很高興。心靈接受它作爲答案然後) –