Tag: 内联

Kotlin实体类型参数不能作为函数体中的类型参数

Kotlin中的特定类型参数可防止类型参数擦除,并允许在运行时知道类型参数。 这允许以下代码编译并按预期方式运行: inline fun <reified T> isA(value: Any) = value is T 但是,当我尝试使用“T”作为类型参数而不是独立时,我得到一个消息,它是一个已擦除类型。 以下代码仅供说明用途 : inline fun <reified T> isListOfA(name: String): Boolean { val candidate = Class.forName(name) return candidate is List<T> } 这是由于技术限制吗? 如果是这样,那么这个限制是什么?

实体类型参数和内部函数

我有一个泛型函数,需要实例化其泛型参数的对象,并将其传递给某个接口的实例。 据我所知,实例化该通用对象的唯一方法是使该函数内联并且对该类型参数进行重写。 但是我不想公开这个接口的实现。 问题是内联函数不能使用内部类。 我基本上想要的是这样的: /* The interface I want to expose */ interface Params<T> { val doc: T } /* The implementation I do not want to expose */ internal class ParamsImpl<T> (override val doc: T) : Params<T> /* The function */ inline fun <reified T> doSomething(init: Params<T>.() -> Unit) { val doc= T::class.java.newInstance() […]

方式混淆优先私人,但实际上是公共类成员的访问,为了在内联方法中使用它们

混淆或限制接触一个班级的公众成员的方法有哪些? 这样做的动机是我希望能够inline一个方法,但是需要访问其他成员,这需要他们是public ,但是我更喜欢这些成员是public ,但是自从他们必须是public ,我正在寻找方法混淆或限制访问他们。 这里是一个例子,我希望preferablyPrivateLock是私人的: class SomeClass { val preferablyPrivateLock = ReentrantLock() inline fun <R> fancyInlineFunction(function:()->R):R { preferablyPrivateLock.lock() try { return function() } finally { preferablyPrivateLock.unlock() } } } PS我知道这似乎是不好的OO设计; 希望这个问题不花我任何名誉…

Kotlin:本地函数是否作为内联参数传递给内联函数?

将lambda函数或匿名函数作为参数传递给内联函数时,很简单,代码粘贴到调用位置,但是当传递本地函数作为参数时,结果看起来不同(如下所示)。 我想知道是否内联? 为什么或者为什么不? 例如: inline fun foo(arg: () -> Int): Int { return arg() } fun bar(): Int { return 0 } fun main(args: Array<String>) { foo(::bar) } 并反编译Java代码: public final class InlinedFuncKt { public static final int foo(@NotNull Function0 arg) { Intrinsics.checkParameterIsNotNull(arg, "arg"); return ((Number)arg.invoke()).intValue(); } public static final int bar() { return 0; […]

Kotlin不能内联一些机构

我有一个内联函数接受两个lambda表达式。 这个函数是在我的代码的热点中调用的,尽管它是内联的,但是为这些实体创建了数千个对象。 有趣的是注释,或者用像println这样简单的调用替换身体,一切都完美。 但由于某种原因,我的具体使用,似乎内联没有做好工作! 我该如何解决这个问题? 与内联体有什么限制? 这是一个错误? 我的用例: fun PlayerSend.sync() = reusable({ val packet = this it.syncMovement(packet) reusable({ if (it.updateRequired) it.sync(this) }, { packet.bits(8, 0 /* amount of players to update */) if (readable > 0) { packet.bits(11, 2047).byteAccess() + this } else packet.byteAccess() }) }, { ses + 81.byte + readable.short + this }) […]

Kotlin实体类型参数不智能投射

我正在试验设置未初始化的值,并试图让以下工作。 这主要是对物化仿制的权力(和限制)的好奇心。 我试图为数据类的可选参数提供默认值。 inline fun <reified T> uninitialized(): T = when (T::class) { Long::class -> -1L // Type mismatch. Required: T Found: Long String::class -> "" // Type mismatch. Required: T Found: String // and so on… else -> throw UnsupportedOperationException("No uninitialized value defined for " + T::class) } data class Thing( var id: Long […]