小编zsm*_*b13的帖子

在Kotlin没有吸气剂的财产

如何使用自定义setter声明属性,但在Kotlin中没有getter?例如,在Anko中,他们这样做:

var myProperty: Type
    @Deprecated(AnkoInternals.NO_GETTER, level = DeprecationLevel.ERROR) 
    get() = AnkoInternals.noGetter()
    set(value) { field = value; /* setter logic */ }
Run Code Online (Sandbox Code Playgroud)

但它对我来说看起来有些笨拙.这是一种正确的方法吗?如果是,那么当项目没有Anko依赖时呢?

PS让我明确一点 - 我想完全没有吸气剂,而不是私人吸气剂

kotlin

5
推荐指数
1
解决办法
881
查看次数

以编程方式在 Kotlin 中实现 Android-Facebook 应用程序的密钥哈希

我正在尝试在 kotlin 中获取 facebook-app 的哈希密钥,然后再使用此 java 方法获取我的应用程序的 hask 密钥:

Java代码:

// Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "your.package", 
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
Run Code Online (Sandbox Code Playgroud)

现在我尝试将此代码片段转换为 kotlin 代码:

科特林代码:

    try {
           val info = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
            for (signature in info.signatures) {
                val md = MessageDigest.getInstance("SHA")
                md.update(signature.toByteArray())
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT))
            }
    } catch …
Run Code Online (Sandbox Code Playgroud)

android kotlin

3
推荐指数
1
解决办法
3883
查看次数

记录Kotlin中函数参数的参数

假设我有一个更高阶的函数,它注册了某种点击监听器.我可以记录它的用途和listener传入的参数,如下所示:

/**
 * Adds a [listener] that's called when the item is clicked.
 *
 * @param listener The listener to add
 */
fun addClickListener(listener: (count: Int) -> Unit) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法记录参数listener?这将是count在这个例子中.在我的实际用例中,我的监听器中有多个参数.

我注意到的是[listener]文本可以在我正在使用此功能的文档视图中单击,但它只显示一个关于它的空对话框.有没有办法以某种方式描述参数?

在此输入图像描述 出现的监听器文档

现在,我最终@paramaddClickListener方法中用块来描述侦听器的参数,但这会在IDE中产生警告,我想知道是否有更合适的方法来执行此操作.

documentation higher-order-functions kotlin

2
推荐指数
1
解决办法
99
查看次数

Kotlin + MVP - 意外覆盖

我一起使用Kotlin和MVP,偶然发现了一点烦恼.

我收到了"意外覆盖"错误(从下面可以看出).除了在MainView界面中更改成员变量名称或getX()之外,是否有任何解决方案.

根据我的研究,没有办法阻止kotlin为'x'生成吸气剂.

class MainActivity : Activity(), MainView {
    val x: String // Accidental override

    override fun getX(): String {
        return x
    }
}

interface MainView {
    fun getX(): String
}
Run Code Online (Sandbox Code Playgroud)

mvp android kotlin

2
推荐指数
1
解决办法
173
查看次数

Kotlin:如何使用扩展功能延迟运行函数

我试图弄清楚如何使用扩展函数来延迟运行任何方法,但似乎无法搞清楚.

我尝试下面的东西,我有一个函数,我想要一个处理程序延迟执行一定的timeInterval:

functionX().withDelay(500)
functionY().withDelay(500)

private fun Unit.withDelay(delay: Int) {
  Handler().postDelayed( {this} , delay)}

private fun Handler.postDelayed(function: () -> Any, delay: Int) {
  this.postDelayed(function, delay)}
Run Code Online (Sandbox Code Playgroud)

任何人?

android postdelayed kotlin

2
推荐指数
2
解决办法
1457
查看次数

Kotlin:For循环范围必须有'iterator()'方法

如果我使用var charSet = 1..10它,但当我使用下面的代码时,我收到此错误.

var charSet = "A".."Z"
for (value in charSet) {    
  println("$value")  
}
Run Code Online (Sandbox Code Playgroud)

For循环范围必须具有'iterator()'方法.

请让我知道如何解决这个问题.

kotlin

2
推荐指数
1
解决办法
2840
查看次数

在 Kotlin 中创建 Arraylist 作为接受任何类型的函数的参数

我是 Android Studio 的 kotlin 新手。我在 kotlin 中编写了一个函数,它接受 Arraylist 作为输入并随机对其进行洗牌 -

fun randomize(array: ArrayList<Any>) { ... }
Run Code Online (Sandbox Code Playgroud)

我希望这个函数接受任何类型的 ArrayList,但使用以下参数调用会出现类型不匹配错误 -

val arr = ArrayList<Int>()
// ...
randomize(array = arr) // Gives Error
Run Code Online (Sandbox Code Playgroud)

我如何使用接受任何类型的ArrayList。感谢您的帮助。

android kotlin

2
推荐指数
1
解决办法
1978
查看次数

Kotlin:从列表中的嵌套集中查找计数(更多功能方法)

下面的功能创建一个地图,获取乘客数量> minTrips的乘客数量.代码完全正常.请看下面

fun List<Trip>.filter(minTrips : Int): Set<Passenger> {
    var passengerMap: HashMap<Passenger, Int> = HashMap()

    this.forEach { it: Trip ->
        it.passengers.forEach { it: Passenger ->
            var count: Int? = passengerMap.get(it)
            if (count == null) {
                count = 1
                passengerMap.put(it, count)
            } else {
                count += 1
                passengerMap.put(it, count)
            }
        }
    }

    val filteredMinTrips: Map<Passenger, Int> = passengerMap.filterValues { it >= minTrips }
    println (" Filter Results = ${filteredMinTrips}")
    return filteredMinTrips.keys
}
Run Code Online (Sandbox Code Playgroud)

虽然这是用Kotlin编写的,但似乎代码最初是用Java编写的,然后转换为Kotlin.如果它真的是用Kotlin写的,我相信这不会是这么多行代码.如何减少代码行?解决这个问题的更有趣的方法是什么?我可以使用哪些功能或功能直接提取乘客设置> minTrips?这是一个太多的代码,似乎很疯狂.任何指针在这里都会有所帮助.

java kotlin kotlin-extension kotlin-android-extensions

2
推荐指数
1
解决办法
217
查看次数

两个可观察量指向相同的参考

我编写了以下示例并检查了对象a和b的observerA变量的值.

class Test {
    val observerA = Observer<String>{}
}
Run Code Online (Sandbox Code Playgroud)

校验

val a = Test()
val b = Test()
AppLogger.LOGE("[A]ObserverA: ${a.observerA} [B]ObserverA: ${b.observerA}")
Run Code Online (Sandbox Code Playgroud)

结果

[A]ObserverA: com.test.Test$observerA$1@e3d8a1b  
[B]ObserverA: com.test.Test$observerA$1@e3d8a1b
Run Code Online (Sandbox Code Playgroud)

我的猜测是a.observerA和a.observerA应该是不同的,但它们引用相同的对象.

当我在下面编写observerA时,我看到创建了不同的对象.我不知道为什么会出现这种差异.

val observerA = object : Observer<String>{
    override fun onChanged(t: String?) {

    }
}
Run Code Online (Sandbox Code Playgroud)

java android kotlin

2
推荐指数
1
解决办法
74
查看次数

在定义函数后如何解决这个'未解析的引用'?

我只是编程的初学者,今天开始学习Kotlin.我收到了这个错误.

fun main(args: Array<String>) {

    val (two, three) = nextTwo(1) // Unresolved reference: nextTwo
    println("1, $two, $three")

    fun nextTwo(num: Int) : Pair<Int, Int> {
        return Pair(num+1, num+10)
    }

}
Run Code Online (Sandbox Code Playgroud)

错误的图片.

kotlin

0
推荐指数
1
解决办法
710
查看次数

变量INT,getter DOUBLE

如果变量是int,是否可以在kotlin中设置getter以返回int的双重insted?

没有宣布新的功能.

var x = 0
    get() = x.toDouble()
Run Code Online (Sandbox Code Playgroud)

getter kotlin

0
推荐指数
1
解决办法
29
查看次数