问题标签 [kotlin-reflect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
523 浏览

java - 如何在 Java 中使用 Kotlin 反射

是否可以从 Java 中使用 Kotlin 反射?

我想KCallable从 Java 中的 Kotlin 函数中获取并使用它的方法callBy来调用具有默认参数的方法。

Kotlin 中的示例:

甚至可能吗?如果是这样,如何KCallable从 Java 代码中获取实例?

编辑:

我不能@JvmOverloads按照建议使用,因为参数的数量、默认参数及其位置可以是任意的。

已知的调用信息是:

  • 参数名称
  • 他们的类型
  • 他们的价值

编辑2:

不在这里工作的例子@JvmOverloads

String这里用一个值调用是模棱两可的。

0 投票
1 回答
239 浏览

kotlin - 基于KClass(反射)将字段名称和值的映射反序列化到数据类

我想从 KClass 的实例和 Map<String, String> 构造一个对象,在其中我将字段名映射到值。

一个例子是:

我的问题是如何使用 Kotlin 反射来做到这一点?如何从可用数据构建对象?我认为只要你指出我正确的方向或给出一个想法就足够了。我的意思是肯定有一种方法,因为我认为这就是 json 序列化程序所做的(我只想要一个更简单的版本,功能更少,在不同的数据格式上)。

如果我可以使用只能存储原始数据类型(int、string、boolean)的数据类来完成这项工作,我会很高兴。

我知道我可以使用像 Jackson 这样的东西,然后构建一个 JsonNode 并反序列化它,但这不是我想要的。我想用反射构建我自己的版本。

0 投票
1 回答
98 浏览

kotlin - 为什么 Kotlin 接口“未打开”?

在 Kotlin 1.4.30 中,当我输入

Kotlin 编译器警告我modifier 'open' is redundant for 'interface'。这是完全有道理的:接口当然是开放的,否则它们将毫无用处。

然而,反射库似乎与此相矛盾:

这有什么意义?的KDocisOpen非常简短:

true如果这个类是开放的。

Kotlin 中“开放”的具体定义是什么? 我认为这意味着“对被该文件之外的类进行子类型化的可能性开放”。

0 投票
1 回答
91 浏览

kotlin - 检查 kotlin 数据类中变量的注释

我必须检查 kotlin 数据类中的特定变量是否存在注释。

注释类

数据类

我必须检查此播放器对象中的特定变量是否存在 Test 注释。

在这里不胜感激,TIA

0 投票
1 回答
135 浏览

kotlin - Kotlin 反射 - 根据属性名称返回具有设置属性值的实例

我正在尝试创建一个函数,该函数返回任何数据类对象设置它的属性值及其属性名称(如果所有字符串)而不更改它的默认值我有一个关于它的示例:

想象一下这个数据类:

我想保留这个空的默认值,但我想要一个适用于任何类的通用函数并返回(在这种情况下)这个:

是否可以?

0 投票
2 回答
784 浏览

kotlin - 在运行时找不到 Kotlin 反射实现。确保类路径中有 kotlin-reflect.jar

我正在学习 Kotlin,但这段代码有问题:

我的 build.gradle 看起来像:

我试图用谷歌搜索它,但我只找到了对我不起作用的具有“实现”依赖性的解决方案。我怎样才能让这个程序运行?

现在,如果我在 IntelliJ 中编译此代码,它会在崩溃时运行:

0 投票
0 回答
571 浏览

maven - 为什么在 TeamCity DSL 中使用“copy”时会出现“java.lang.AssertionError: Built-in class kotlin.Any is not found”?

背景

我正在尝试使用 Kotlin 创建一些 Teamcity 配置。在测试 Teamcity 的生成时,我在 Intellij 中使用了 Maven,尽管我使用命令行得到了相同的结果。

问题

一个最小的例子:https ://gist.github.com/3761e6f3847db9f8f772c9e16663aaa9

要重新创建问题,请使用以下命令: mvn teamcity-configs:generate

错误是:

尽管我已采取措施最小化提供的示例,但我不是 Maven 专家,我不确定还有什么可以从pom.xml文件中删除。

问题似乎源于尝试使用 to copy(cf., docs ),这似乎使 Kotlin 因一些反射问题而绊倒。删除copy并且配置的生成工作正常。

研究

有几个地方讨论了这个问题(例如这里这里),但我找不到任何与我遇到的问题相匹配的地方,也找不到为我解决问题的解决方案。

最有趣的是这个,它与从 Kotlin 版本 1.3.x 迁移到 1.4.x 无关,但是,kotlin-stdlib[...]JetBrainkotlin-reflect开发人员“Udalov”(直接链接到评论)。细节在我头上,可能与这里无关,但这是我见过的解决这个问题的最具技术性的答案。

我试过的

我尝试将其添加kotlin-reflect为显式依赖项并确保它kotlin-stdlib-jdk8存在且正确。我尝试将 Kotlin 版本从 1.3.70 更改为 1.3.72 再到 1.4.32,结果没有改变。

对此的任何帮助或见解将不胜感激,即使只是为了增进我对这个软件堆栈的理解。

0 投票
1 回答
175 浏览

unit-testing - 使用反射获取私有方法,以便将其传递给 Kotlin 中的高阶函数

我很难尝试使用反射在 Kotlin 中获取私有方法,以便将其作为参数传递给更高阶函数,这是我得到的以及我需要做的:

获取私有方法的函数,可能是我应该更改或修复的:

这是我拥有的高阶函数:

这些是我需要以某种方式获得的类和私有方法:

最后是一个单元测试,我试图确保将正确的方法传递给高阶函数,为了简化,我省略了细节:

我知道可以使用privateFuncas进行测试,也可以使用 进行public注释@VisibleForTesting,但我想要的是尽可能避免损害设计。

有任何想法吗?提前致谢!

0 投票
1 回答
64 浏览

kotlin - 列出 Kotlin 类中的所有属性,不包括具有自定义 getter 的属性

有什么简单的方法可以列出类中的所有属性,不包括具有自定义 getter 的属性?

例如在这种情况下:

我想找到:[ Person::name, Person::age, Person::uuid ]

0 投票
2 回答
78 浏览

kotlin - 访问接口类型变量的实现属性

我正在尝试访问id类 ( FooImpl) 的属性 ( ) 的委托。问题是,这个类实现了一个接口 ( Foo),并且有问题的属性覆盖了这个接口的一个属性。委托只存在于类中(不能存在于接口中)。

问题是::在类型变量上使用运算符Foo总是返回 的属性Foo,而不是实际实例的属性。代码中的问题:

这打印:

但这需要正确实现的编译时知识。我正在寻找的是访问正确的属性而无需在FooImpl那里指定。

该信息在运行时存在,因为到目前为止我发现的最少(!)侵入性解决方法是添加和访问属性fun idProp(): KProperty0<*>,并使用它访问属性。Foooverride fun idProp() = ::idFooImpl

还有比这更好的方法吗?