小编Ale*_*lex的帖子

Kotlin认为两种方法具有相同的JVM签名,但实际上并没有

我来自C#背景,我知道如何在C#中实现它,但我正在与Kotlin斗争.我有2个扩展功能:

fun <T> Foo<T>.myFunction(func: () -> Unit): Foo<T>
Run Code Online (Sandbox Code Playgroud)

fun <T> Foo<T>.myFunction(func: () -> Foo<T>): Foo<T>
Run Code Online (Sandbox Code Playgroud)

显然,func的返回类型在两个函数中都是不同的.第一个函数执行它并返回它,第二个函数执行func并返回func的结果.但它给了我一个错误:

"平台声明冲突:以下声明具有相同的JVM签名".

如何在Kotlin中正确实现这一点?

kotlin

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

BindingAdapter 不适用于 DataBinding

我有一个按钮:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:binding="http://schemas.android.com/tools">

    <data>

        <variable
            name="vm"
            type="com.MyViewModel" />
    </data>
    <Button
                binding:singleParameterString="test"
                binding:firstStringParameter="@{vm.userName}"
    .../>
...
Run Code Online (Sandbox Code Playgroud)

BindingAdapter 如下所示:

@BindingAdapter("binding:singleParameterString", "binding:firstStringParameter")
        fun setFormattedString(btn: Button, singleParameterString: String, firstStringParameter: String) {
            btn.text = String.format(singleParameterString, firstStringParameter)
        }
Run Code Online (Sandbox Code Playgroud)

这不起作用,它给出了以下错误:“在 android.widget.Button 上找不到参数类型为 java.lang.String 的属性 'binding:firstStringParameter' 的设置器。”。但是,如果我更改 binding:firstStringParameter="@{vm.userName}"为,例如, binding:firstStringParameter="my lovely string"这将起作用。

ViewModel 中的用户名是val userName: String = "my name",如果我尝试android:text="@{vm.userName}"这样做。所以问题出在数据绑定上。我有另一个项目,我使用了相同的代码并且它可以工作......听起来像是数据绑定/适配器绑定框架中的一个错误,但也许有人遇到了这个问题?

PS我也试过binding:firstStringParameter="@{ + vm.userName}",没用。

通过查看自动生成的 Binding 类,我发现了一个非常奇怪的代码:

blah.setFormattedString(this.mboundView1, (java.lang.String)null, javaLangStringVmUserName);
Run Code Online (Sandbox Code Playgroud)

data-binding android kotlin android-binding-adapter

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