【问题标题】:Using kotlin extension function in Java code在 Java 代码中使用 kotlin 扩展函数
【发布时间】:2021-01-17 15:56:56
【问题描述】:

我创建了一个扩展函数来监听按钮的点击监听器,当我尝试从 Java 代码访问它时它不起作用,

无法从 java 文件访问 clicks(),这是我尝试过的

您能否建议如何解决此问题。

谢谢 回复

文件 - 扩展名.kt

   fun Button.clicks(): Flow<Unit> = callbackFlow {
        setOnClickListener {
            offer(Unit)
        }
        awaitClose { setOnClickListener(null) }
    }

在我的 java 代码中 - FillingFragment.java

 @NotNull
    @Override
    public Flow<Void> getStartFillingObservableFlow() {
        return dataViewHolder.btnStartFilling.clicks(); //CLICKS IS NOT. RECOGNISED
    }

DataViewHolder.Java

  @BindView(R.id.start_filling_action)
    public Button btnStartFilling;

【问题讨论】:

    标签: java android kotlin fragment


    【解决方案1】:

    扩展函数通常编译为静态函数,因此您可以像这样调用它们:

    ExtensionKt.clicks(dataViewHolder.btnStartFilling);
    

    【讨论】:

    • 你好@andei,我试过了,现在可以访问它了
    • 它给了我一个错误 必需类型:Flow 提供:Flow
    • 如何让扩展函数返回void?
    • 或者我应该使用 Unit 而不是 void
    • 我认为你的 getStartFillingObservableFlow 函数应该返回 Flow&lt;Unit&gt;
    猜你喜欢
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多