如何通过KotlinPoet省略生成类型与属性的冗余public修饰符?
如何用KotlinPoet省略类型与属性中的冗余public修饰符
当然可以!KotlinPoet完全支持避免生成冗余的public修饰符,毕竟Kotlin里类、属性等成员的默认可见性就是public,没必要多写。我分两种Builder给你说明操作方式:
TypeSpec.Builder(类、接口等类型)
KotlinPoet的TypeSpec.Builder默认不会为类型添加public修饰符,除非你手动指定。所以只要不调用addModifiers(KModifier.PUBLIC),生成的类/接口就不会带冗余的public。
举个例子:
// 正确写法:不指定public修饰符 val generatedClass = TypeSpec.classBuilder("User") .addProperty(PropertySpec.builder("username", String::class) .initializer("%S", "johndoe") .build()) .build()
生成的代码会是:
class User { val username = "johndoe" }
如果之前误加了addModifiers(KModifier.PUBLIC),删掉这一行就搞定了——毕竟Kotlin默认类就是public,没必要显式声明。
PropertySpec.Builder(属性)
属性的逻辑和类型完全一致:不手动添加KModifier.PUBLIC,KotlinPoet就不会生成冗余的public修饰符。
比如:
// 正确写法:不指定public修饰符 val generatedProperty = PropertySpec.builder("email", String::class) .initializer("%S", "john@example.com") .build()
生成的属性代码是:
val email = "john@example.com"
只有当你需要非默认可见性(比如private、internal)时,才需要调用addModifiers()指定对应的修饰符。
总结一下:只要遵循Kotlin的默认可见性规则,不在Builder中手动添加KModifier.PUBLIC,生成的代码就会自动省略冗余的public修饰符,完全符合Kotlin的编码习惯。
内容的提问来源于stack exchange,提问作者m_katsifarakis
相关产品推荐
相关产品推荐

