2017-10-13 8 views
0

Kotlinでは、変数は宣言時に初期化する必要があり、型名に?が追加されていない限り、nullにはできません。Kotlinでのスプリング注入リファレンス

@AutoWired 
var someService: SomeService? = null 

迷惑があること、ここにどこでもsomeService上から使用され、ヌル・安全ロジックのいくつかの種類を指定しなければならないことは明らかである:だから春によって注入されることを意図Bean参照のように宣言しなければならないであろうそれは?:またはまっすぐなヌルチェックです。

私たちが行うことができます。もちろん、

​​

しかし、それは常に可能ではない、と使い捨てのインスタンスはただ混乱しています。

私の質問は、この変数が初期化され、実際にはnullではないことをKotlinに伝えることはとにかくありますか?

答えて

1

2つのオプションがあります。

1)

コンストラクタ・インジェクションコンストラクタ・インジェクションを使用することが明確に依存関係がオブジェクトを構築するために設定しなければならないことを宣言しますので、私の意見では最良の方法です。

2)は、docにTHTトピックの詳細lateinit

読むと、あなたのフィールドを宣言します。 https://kotlinlang.org/docs/reference/properties.html

後期に初期化プロパティ

通常、プロパティは非を持つように宣言-null型は、コンストラクタで初期化された である必要があります。しかし、これはかなり頻繁に ではありません。たとえば、プロパティは 依存性注入またはユニットテストのセットアップメソッドで初期化できます。この の場合、コンストラクタにnull以外の初期化子を指定することはできませんが、 クラス本体内の プロパティを参照する際にはnullチェックを回避します。

public class MyTest { 
    lateinit var subject: TestSubject 

    @SetUp fun setup() { 
     subject = TestSubject() 
    } 

    @Test fun test() { 
     subject.method() // dereference directly 
    } 
} 
1

春のプロジェクトの公式の勧告はコンストラクタ・インジェクションを使用することです。 Kotlinでは、次のようになります。

@Service 
class GobblinMetricsConsumer(
    private val graphiteClient: GraphiteClient, 
    private val parserService: JsonParserService, 
    private val kafkaConfigurationProperties: KafkaConfigurationProperties 
) { 
    // code will go here 
} 
関連する問題