问题标签 [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 回答
429 浏览

kotlin - 枚举包中定义的扩展属性

我正在用 Kotlin 编写 HTML 模板语言。

我的模板引擎将需要解析属性表达式,例如,不仅要在 's 的类和超类中定义的成员中obj.myProperty查找,还要在用户指定的 Kotlin 包列表中定义的扩展属性中查找。"myProperty"obj

例如,如果我的解释器正在评估x.absoluteValue并且x结果是一个 Int,我有以下信息:

  • 对象 KClass:Int::class
  • 物业名称:"absoluteValue"
  • 用户要求搜索的包列表:kotlin.math等。

我可以使用什么 API 来获取给定包中定义的所有顶级扩展属性kotlin.math的列表,例如,作为反映项目的列表,例如List<KProperty<*>>?在模板编译时(即 Kotlin 运行时),我将浏览该扩展列表并寻找一个"absoluteValue"与 Int 接收器兼容的名称。

我知道我可以手动定义扩展属性列表,例如listOf(Int::absoluteValue, ...)在导入它们之后,但我希望我的用户指定一个包列表,而不是单个属性。


更新:我决定将我的模板引擎基于 Kotlin 的 JSR-223 支持,javax.script.ScriptEngineManager因此使用稳定的 API 并让 Kotlin 编译器在它认为合适的时候解析扩展属性。

0 投票
1 回答
53 浏览

java - Kotlin:javaSetter 方法未编译

我使用以下方法检索了我班级的一个属性:

我可以做这个:

但是这个方法不能编译:

即使该方法存在且未被弃用

0 投票
1 回答
164 浏览

kotlin - 我在 Kotlin KClass 中看不到私人成员

我正在开发一个使用反射的库,我想操作给定 KClass 的所有属性/函数。

使用该KClass::members属性,我可以操作所有可访问的成员(根据文档),即:公共、内部和受保护的字段、属性和函数。但我看不到私人的。

使用 Java 反射,我可以使用 . 查看所有字段(包括私有字段)Class.getDeclaredFields(),同样我可以使用 . 查看私有方法Class.getDeclaredMethods()

有没有办法使用 kotlin 反射 API 来做到这一点?

0 投票
1 回答
4133 浏览

kotlin - 如何使用反射更改 kotlin 私有验证?

我可以使用反射访问私有 val 值,如下所示

但是如果我想改变info,我怎么能用反射来做呢?

0 投票
1 回答
560 浏览

kotlin - 如何在kotlin中的主要构造函数参数上添加注释

具有以下课程:

并尝试使用

没有找到注释。我必须移动参数前面的注释才能使其正常工作

这是jetbrains的解析错误还是正常行为?


编辑

你可以在这里找到注释:

0 投票
2 回答
442 浏览

kotlin - 如何找到一个 lateinit var 是否已通过反射初始化?

我想通过反射找出对象的 lateinit 属性是否已初始化。我该怎么做呢?

在 UninitializedPropertyAccessException 中获取属性并检查非空结果

0 投票
1 回答
210 浏览

kotlin - DelegatedProperty 反射不适用于发布版本

在运行时,我需要访问委托属性的委托实例中的属性。

当我在调试中编译以下代码时,它工作得很好:

当我在调试中调用“doStuff”方法时,“key”val 将获得“This is the key”字符串。

但是,当我在发行版中编译此代码时,出现错误:

2019-11-07 16:16:04.141 7496-7496/? E/AndroidRuntime:致命异常:主进程:com.trax.retailexecution,PID:7496

eaaaj0:属性“somePropGoesHere”(JVM 签名:getSomePropGoesHere()I)未在 com.trax.retailexecution.util.Potato 类中解析

在 eaaapc(KDeclarationContainerImpl.kt:40)

在 eaaaz$d.invoke(KPropertyImpl.kt:4)

在 eaaal0.a(ReflectProperties.java:4)

在 eaaaze(KPropertyImpl.kt:2)

我不确定如何

在 eaaaz$e.invoke(KPropertyImpl.kt:1)

在 eaaam0.a(ReflectProperties.java:3)

在 eaaazi(KPropertyImpl.kt:1)

在 cmabaa(DefaultConfigurationFactory.java:82)

在 cmabaa(DefaultConfigurationFactory.java:153)

在 com.trax.retailexecution.util.Potato.getKey(Potato.kt:1)

在 mynamespacegoeshere.PotatoShredder.doStuff(Potato.kt:2)

我认为它与proguard有关,因为我们在压缩/收缩期间删除了类和/或方法,但我真的找不到正确解决问题的方法。

0 投票
2 回答
1574 浏览

android - Kotlin 运行时错误 kotlin.Any 未找到

我有一个多模块项目。对于相同的构建,apk 的大小可能会相差300KB (from 17 to 17.3MB). 在运行时的构建17MB中,我收到一个错误:

同样在项目中,配置了混淆。但我不认为这是由这个引起的。清理、无效和重新启动并不总是有帮助。

0 投票
1 回答
237 浏览

kotlin - 科特林 | 使用 lambda 查找返回 lambda 的函数的参数

假设我有一个函数haveFun,它接受一个Method(来自java.lang.reflect包)作为参数并返回一个 lambda,如下所示

现在,如果我将一个方法传递给函数并将 lambda 分配给一个字段

我可以使用上面的 lambda 字段找出并访问Method传递给函数的那个​​吗?game

我可以Method在 Intellij 上看到 while 调试,但不确定如何访问它。

在此处输入图像描述

0 投票
1 回答
114 浏览

java - 从类路径中获取所有类,这些类通过 X 的超类继承类 X

假设我有一个密封的类 A,B 和 C 继承了它。

现在,我在类路径中的单独文件中有几个类:com.dummy继承类 B 或 C

现在,我想扫描给定 B 或 C 的类路径和超类类型的所有类,即 A。

我试图实现它但没有工作的片段

这将返回 0 个类。如果我改变 getSubTypesOf(B::class.java),那么我就能得到所有继承 B 的类。