我发现了一个有趣的事情,但我做不到。 是否有任何方法使本地扩展方法在接收器的函数中可用。 val list = ArrayList<Any>(); fun <T> Array<T>.bind(context: MutableList<in T>, block: Array<T>.() -> Unit) { fun Array<T>.save() { context.addAll(this); } block(); } arrayOf(1, 2, 3).bind(list) { save(); //todo: how to bind extension in execution scope }; 我知道有一种替代方法,为接收器引入另一种类型,但我想避免它。 例如: interface Savable { fun save(); } fun <T> Array<T>.bind(context: MutableList<in T>, block: Savable.() -> Unit) { […]
我想创建一个封闭的类的宇宙,其中每个子类是一些外部类的内部类。 我以为我可以使用密封的内部类作为层次结构的基础,如下所示: class Outer { fun foo(): Int { // … } inner sealed class InnerBase(val i: Int) { fun sharedFunctionality() { println(foo() + i) } abstract fun doIt() inner class Inner1: InnerBase(1) { override fun doIt() { blah() sharedFunctionality() bloo() } } } } 注意 Outer是一个适当的类,它可以有许多不同的实例。 每个实例应该能够创建将调用正确的foo Inner1 InnerBase子类的Universe是有限的 InnerBase有一些实例方法,被各种Inner子类使用,访问Outer的非静态方法foo InnerBase的具体子类(例如Inner1 )将参数传递给InnerBase的构造函数 但是,这个问题是我不知道如何在Outer构造一个Inner1类型的值。 我希望这会工作: […]
我有两个在Android Studio中链接的项目/模块。 其中一个作为一个Api /核心,我需要某些类只能从这个模块访问,但从所有的包(所以“默认”在这种情况下是无用的)访问。 但似乎在Java中它不是像内部(C#,SWIFT)的修饰符。 “模块”修改器是为Java 7提出的,但没有实现。 那么,是否有任何方法可以保护模块的类别不受外界影响,而不会将其范围限制在当前的包中? 谢谢!
fun calcInterest(amount: Double, interest: Double): Double { return(amount *(interest/100.0)) } fun main(args: Array<String>) { for (i in 1.0..2.0 step .5) { println("&10,000 at 5% interest is = ${calcInterest(10000.0,i)}") } } 我得到的错误说For循环范围必须有一个“Iterator()”方法。 它强调了我的双打(我在1.0..2.0) 我怎样才能在一个范围内使用双打? 重新加载范围( https://blog.jetbrains.com/kotlin/2013/02/ranges-reloaded/ )上的网站显示使用数据类型Double是好的。 我不知道我的是怎么了 我需要使用双打,因为我的利率是使用小数。 完全新编程,希望有人可以简单地解释。 谢谢! 编辑:添加步骤.5
我无法找到任何有关对象,伴侣对象和懒惰如何处理记忆的地方。 任何人都可以在这里解释我如何使用内存? 谢谢
我查看了范围的文档 ,我看不到任何向后的范围。 是否有可能做到这样的事情: for (n in 100..1) { println(n) } 并得到结果: 100 99 98 …
我有一个数值范围内的值(例如0..100 ),我想把它翻译成另一个范围,(例如0..9 )。 所以结果是: 50 -> 4或100 -> 9 ,… Kotlin有什么方法可以帮助我吗?
当我提到rng.max时,我遇到了编译器“不能在以下候选者中选择”的问题: rng:IntRange : inline val <T:Comparable<T>> ClosedRange<T>.max get() = endInclusive // max of range inline val <T:Comparable<T>> Iterable<T>.max get():T? = max() // max element 我认为这是因为一个ClosedRange实现ClosedRange和(间接通过IntProgression ) Iterable 。 如果我想编写一个适用于CharRange , LongRange和CharRange (可能但不一定是扩展ClosedRange )的扩展ClosedRange ,是否有任何可以明确解析为ClosedRange语法,而不是相似名称的Iterable在这种情况下扩展?
有没有办法限制DSL中的扩展方法? 说我有这样的班级结构: class Outer { fun middle(op: Middle.() -> Unit): Middle { val middle = Middle() middle.op() return middle } } class Middle { fun inner(op: Inner.() -> Unit): Inner { val inner = Inner() inner.op() return inner } } class Inner fun outer(op: Outer.() -> Unit): Outer { val outer = Outer() outer.op() return […]
我刚刚开始与Kotlin 。 我想创建范围从1到n ,其中n被excluded 。 我发现Kotlin有范围,我可以使用它们如下 1..n 但这是一个包含1和n范围。 我如何创建exclusive范围。