2017-05-18 12 views
2

Kotlinでは、String :: class(型がStringになる値を表す)などの型のKClassを取得すると宣言すると、その値がnullableであることを示す構文があります。 Stringの代わりにString?の値を表します)。null値のKClass参照

私はKotlinPoetを使用してKotlinクラスを生成しようとしていますが、PropertySpec.builderを使用して作成するすべてのプロパティはnullableではありません(実際にStringが必要な場合はString?

ありがとうございました。

答えて

4

誰かがこれを必要とする場合:KotlinPoet 0.3.0の時点では、構文は次のとおりです。

PropertySpec.builder("myVar", String::class.asTypeName().asNullable()).mutable(true).initializer("%S", null) 

生成する:mfulton26から

var myVar:String? = null 
5

号KotlinはNullable types and Non-Null Typesを持っていますが、それはNULL可能クラスと非ヌルクラスの概念がありません。 KTypeは、クラシファイアプラスヌル可能性であり、分類器はKClassとすることができる。

KotlinPoet 0.1.0では、null可能な型を表す方法はありませんでしたが、そのようなサポートは0.2.0からTypeName.asNullableに追加されました。例えば:

val type = TypeName.get(String::class).asNullable() 
2

KotlinPoet 0.2.0がリリースされたばかり、とasNullable()呼び出して、NULL可能なタイプのサポートが追加されました。たとえば、次のように

PropertySpec.builder("name", TypeName.get(String::class).asNullable()).build() 

...作成します。リリースノートには言及として、0.2.0でいくつかの関数のシグネチャは(タイプ、名前から反転してきたことを

val name: java.lang.String? 

注意を)orderを(name、type)の代わりに使用するようにしてください。アップグレードするとコードが壊れることはありません。

+0

回答は、関連する情報を提供します。私はKotlinPoet(0.2.0にアップグレード後)で私の問題を解決する実際のコードを与えるので、この1つを選択しました。詳細な回答をお寄せいただきありがとうございます。 – Antoine

+0

TypeName.get(String :: class)は0.3.0では動作しません。私はそれが新しいTypeNameクラスで動作させるように見えるかもしれません。正しい構文が何であるかを知っている人は、教えてください! – Antoine

+0

ねえ、あなたが今使っていると思うのは、 'String :: class.asTypeName()。asNullable()'です。 IntelliJがそれ自身では見つからないようなインポートが必要になります: 'import com.squareup.kotlinpoet.TypeName.Companion.asTypeName' – zsmb13

関連する問題