问题标签 [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.
android - Android 构建因 kotlin-reflect 和 proguard 而失败
如果我包含kotlin-reflect
它,我将无法构建我的发布产品。我尝试将其添加到 proguard 配置中:
但这根本没有帮助。这是 gradle 构建的错误结果:
我正在使用 kotlin 1.1.1(和 gradle 3.3,如果这很重要的话。) j
reflection - 如何在 Kotlin 中获取 KType?
我正在尝试 Kotlin 中的反射功能,但我似乎无法理解如何获取 KType 值。
假设我有一个将短语映射到对象工厂的类。如果有歧义,用户可以提供一个type
参数,将搜索范围缩小到仅返回该类型对象(或某些子类型)的工厂。
type
需要接受任何东西,包括Int
,根据我的经验,这似乎受到了一些特殊对待。默认情况下,它应该类似于Any
,表示“不排除任何工厂”。
如何将默认值(或任何值)分配给type
?
kotlin - 将 Kotlin 类属性设置器作为函数引用
在下面的示例中,t::x
返回对属性 getter 的引用。我如何为二传手获得相同的信息?
reflection - Kotlin 检查函数是否需要实例参数
如果 aKCallable
是使用Any()::toString
then 创建的,那么当它稍后被引用时,您不需要传递该Any
实例(使用 时call
)。
尽管如果它是使用Any::toString
(不是 的实例Any
)创建的,则需要传递一个Any
实例。
所以我的问题是如何轻松找出是否需要传递该实例参数以及该参数是否强制?
我找到了一种方法来做到这一点:
callable.parameters[0].kind == KParameter.Kind.INSTANCE
但这不是很好,我想知道是否有更简单或推荐的方法来解决这个问题。谢谢!
reflection - 检查函数是否为扩展
给定一个KFunction
如何检查它是否是扩展功能?
我知道的唯一方法是检查是否function.extensionReceiverParameter
返回null
。有没有其他或推荐的方法?
kotlin - 对属性设置器的方法引用
如何在不使用 kotlin-reflect 的情况下获取对属性设置器的方法引用?
基本上,如果我用 java 方式编写代码,那就超级简单了
但因为var value: Int
我得到
proguard - Proguard 和 Kotlin-Reflect/Kotlin 注释
寻求将专业人士置于proguard的人的帮助。
kotlin-reflect 使用的注释(jackson-module-kotlin v v2.8.8 所需的依赖项)在升级到 kotlin 1.1.2-3 后将被剥离。proguard的错误是:
Warning:kotlin.reflect.jvm.internal.impl.descriptors.CallableDescriptor: can't find referenced class org.jetbrains.annotations.ReadOnly
一些注释会发生这种情况,而不仅仅是 ReadOnly。我们已经尝试添加一个好的 ol' catch all 但错误仍然存在:
查看ReadOnly
它的来源是一个@interface
withjava.lang.annotations.*
导入的 for @Documented
, @RetentionPolicy.CLASS
,@Target
kotlin - Kotlin 的反思:未知类型参数
我正在对 Kotlin 的反射进行一些实验。
我正在尝试使用其参数获取泛型类的反射对象。
在 Java 中,这将是一个ParameterizedType
.
使用 Java 的反射 API 获得这样一个东西的方法有点复杂:创建一个泛型类的匿名子类,然后获取它的超类型第一个参数。
这是一个例子:
当 I 时println(jGeneric<List<String?>>())
,它会打印java.util.List<? extends java.lang.String>
,考虑到 KotlinList
使用声明站点out
差异并且 Java 类型没有可空性的概念,这是合乎逻辑的。
现在,我想使用 Kotlin 反射 API(当然,它包含可空性信息)来实现同样的结果。
当然,List<String>::class
不能工作,因为它会产生一个KClass
. 我正在寻找一个KType
.
但是,当我尝试这个时:
当 I 时println(kGeneric<List<String?>>())
,它会打印出来[ERROR : Unknown type parameter 0]
,这非常......好吧,虎头蛇尾;)
在 Kotlin 中,我怎样才能得到一个KType
反射List<String>
?
kotlin - 在 Kotlin 中组合/合并数据类
有没有办法在不指定所有属性的情况下合并 kotlin 数据类?
具有以下签名的函数:
此函数检查两个类的每个属性以及它们不同的位置,使用左侧参数创建一个新的 MyDataClass。
这可能使用 kotlin-reflect 或其他方式吗?
编辑:更清晰
这是对我想要做的事情的更好描述
kotlin - 反射调用函数并使用默认参数
给定以下功能
如何使用反射调用它而不指定x
(或以某种方式使用默认值,而不是硬编码)?