标签: kotlinpoet

如何将 Map<String, KClass<out Any>> 设置为属性类型?

如何使用 Kotlinpoet 生成以下代码行?

val myMap:Map<String, KClass<out Any>>
Run Code Online (Sandbox Code Playgroud)

我在 init 块中初始化 myMap。

kotlin kotlinpoet

1
推荐指数
1
解决办法
888
查看次数

KotlinPoet - 生成 Koin 模块

我是 KotlinPoet 的新手,我找不到如何创建以下 Koin 模块语句:

internal val apiModules = module {
    single<Name1> { get<Retrofit>().create(Name1::class.java) }
    single<Name2> { get<Retrofit>().create(Name2::class.java) } 
}
Run Code Online (Sandbox Code Playgroud)

直接写入 Kotlin 文件(无包装类)

我一直在使用 PropertySpec 和 CodeBlock,但我不知道如何导入 Koin DSL 或如何在代码生成中引用这些导入的类。我也无法通过纯字符串生成来生成代码。

lambda kotlin kotlinpoet koin

1
推荐指数
1
解决办法
669
查看次数

如何在 KotlinPoet 中实现 Comparable?

FleshgrinderGitHub 上提交。

如何为Comparable当前正在生成的类实现?

ParameterizedTypeName.get(Comparable::class, ?)方法,但不清楚如何传递第二个参数。生成类时唯一可用的ClassName是它的 。

最小的例子:

FileSpec.builder("com.fleshgrinder", "KotlinPoet").apply {
    val className = ClassName("com.fleshgrinder", "KotlinPoet")
    addType(TypeSpec.classBuilder(className).apply {
        addSuperinterface(ParameterizedTypeName.get(Comparable::class, Any::class))
    }.build())
}.build().writeTo(System.out)
Run Code Online (Sandbox Code Playgroud)

产生:

package com.fleshgrinder

import kotlin.Any
import kotlin.Comparable

class KotlinPoet : Comparable<Any>
Run Code Online (Sandbox Code Playgroud)

我想要什么:

package com.fleshgrinder

class KotlinPoet : Comparable<KotlinPoet>
Run Code Online (Sandbox Code Playgroud)

kotlin kotlinpoet

0
推荐指数
1
解决办法
523
查看次数

创建扩展函数(名称中带有 . 的函数)

我想生成一个非常简单的类,只包含扩展函数,如下所示:

import com.my.app.SomeClass

fun SomeClass.function() {
}
Run Code Online (Sandbox Code Playgroud)

我尝试的:

val packageName = ...
val annotatedClassName = annotatedElement.simpleName
val fileName = "${annotatedClassName}_KotArgsExtensions"

val extensionBuilder = FileSpec.builder(packageName, fileName)

val funSpecBuilder= FunSpec.builder("${SomeClass::class.java.simpleName}.function").build()
extensionBuilder.addImport(SomeClass::class.java.`package`.name, SomeClass::class.java.simpleName)

extensionBuilder.addFunction(funSpecBuilder)
Run Code Online (Sandbox Code Playgroud)

我得到什么:

import com.my.app.SomeClass

fun `SomeClass.function`() {
}
Run Code Online (Sandbox Code Playgroud)

问题

如何正确创建像这样的扩展函数fun SomeClass.function()

kotlinpoet

0
推荐指数
1
解决办法
844
查看次数

标签 统计

kotlinpoet ×4

kotlin ×3

koin ×1

lambda ×1