问题标签 [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.
java - 如何在 Java 中使用 Kotlin 反射
是否可以从 Java 中使用 Kotlin 反射?
我想KCallable
从 Java 中的 Kotlin 函数中获取并使用它的方法callBy
来调用具有默认参数的方法。
Kotlin 中的示例:
甚至可能吗?如果是这样,如何KCallable
从 Java 代码中获取实例?
编辑:
我不能@JvmOverloads
按照建议使用,因为参数的数量、默认参数及其位置可以是任意的。
已知的调用信息是:
- 参数名称
- 他们的类型
- 他们的价值
编辑2:
不在这里工作的例子@JvmOverloads
:
String
这里用一个值调用是模棱两可的。
kotlin - 基于KClass(反射)将字段名称和值的映射反序列化到数据类
我想从 KClass 的实例和 Map<String, String> 构造一个对象,在其中我将字段名映射到值。
一个例子是:
我的问题是如何使用 Kotlin 反射来做到这一点?如何从可用数据构建对象?我认为只要你指出我正确的方向或给出一个想法就足够了。我的意思是肯定有一种方法,因为我认为这就是 json 序列化程序所做的(我只想要一个更简单的版本,功能更少,在不同的数据格式上)。
如果我可以使用只能存储原始数据类型(int、string、boolean)的数据类来完成这项工作,我会很高兴。
我知道我可以使用像 Jackson 这样的东西,然后构建一个 JsonNode 并反序列化它,但这不是我想要的。我想用反射构建我自己的版本。
kotlin - 为什么 Kotlin 接口“未打开”?
在 Kotlin 1.4.30 中,当我输入
Kotlin 编译器警告我modifier 'open' is redundant for 'interface'
。这是完全有道理的:接口当然是开放的,否则它们将毫无用处。
然而,反射库似乎与此相矛盾:
这有什么意义?的KDocisOpen
非常简短:
true
如果这个类是开放的。
Kotlin 中“开放”的具体定义是什么? 我认为这意味着“对被该文件之外的类进行子类型化的可能性开放”。
kotlin - 检查 kotlin 数据类中变量的注释
我必须检查 kotlin 数据类中的特定变量是否存在注释。
注释类
数据类
我必须检查此播放器对象中的特定变量是否存在 Test 注释。
在这里不胜感激,TIA
kotlin - Kotlin 反射 - 根据属性名称返回具有设置属性值的实例
我正在尝试创建一个函数,该函数返回任何数据类对象设置它的属性值及其属性名称(如果所有字符串)而不更改它的默认值我有一个关于它的示例:
想象一下这个数据类:
我想保留这个空的默认值,但我想要一个适用于任何类的通用函数并返回(在这种情况下)这个:
是否可以?
kotlin - 在运行时找不到 Kotlin 反射实现。确保类路径中有 kotlin-reflect.jar
我正在学习 Kotlin,但这段代码有问题:
我的 build.gradle 看起来像:
我试图用谷歌搜索它,但我只找到了对我不起作用的具有“实现”依赖性的解决方案。我怎样才能让这个程序运行?
现在,如果我在 IntelliJ 中编译此代码,它会在崩溃时运行:
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,结果没有改变。
对此的任何帮助或见解将不胜感激,即使只是为了增进我对这个软件堆栈的理解。
unit-testing - 使用反射获取私有方法,以便将其传递给 Kotlin 中的高阶函数
我很难尝试使用反射在 Kotlin 中获取私有方法,以便将其作为参数传递给更高阶函数,这是我得到的以及我需要做的:
获取私有方法的函数,可能是我应该更改或修复的:
这是我拥有的高阶函数:
这些是我需要以某种方式获得的类和私有方法:
最后是一个单元测试,我试图确保将正确的方法传递给高阶函数,为了简化,我省略了细节:
我知道可以使用privateFunc
as进行测试,也可以使用 进行public
注释@VisibleForTesting
,但我想要的是尽可能避免损害设计。
有任何想法吗?提前致谢!
kotlin - 列出 Kotlin 类中的所有属性,不包括具有自定义 getter 的属性
有什么简单的方法可以列出类中的所有属性,不包括具有自定义 getter 的属性?
例如在这种情况下:
我想找到:[ Person::name, Person::age, Person::uuid ]
。
kotlin - 访问接口类型变量的实现属性
我正在尝试访问id
类 ( FooImpl
) 的属性 ( ) 的委托。问题是,这个类实现了一个接口 ( Foo
),并且有问题的属性覆盖了这个接口的一个属性。委托只存在于类中(不能存在于接口中)。
问题是::
在类型变量上使用运算符Foo
总是返回 的属性Foo
,而不是实际实例的属性。代码中的问题:
这打印:
但这需要正确实现的编译时知识。我正在寻找的是访问正确的属性而无需在FooImpl
那里指定。
该信息在运行时存在,因为到目前为止我发现的最少(!)侵入性解决方法是添加和访问属性fun idProp(): KProperty0<*>
,并使用它访问属性。Foo
override fun idProp() = ::id
FooImpl
还有比这更好的方法吗?