【问题标题】:How to replace method reference(::) in java to normal constructor call?java - 如何将java中的方法引用(::)替换为普通的构造函数调用?
【发布时间】:2018-12-24 18:44:06
【问题描述】:

之前我在 java 中有一个模型类,它使用autovalue。现在,它已转换为 Kotlin 数据类。

模型类 -->

public static SampleClass create(
@NonNull final SamplePost post,
@NonNull final List<SampleComment> comments) {
return new AutoValue_SampleClass(post, comments);
}

调用类 -->

return Observable.zip(...

                    SampleClass::create);
          }

新数据类 -->

data class SampleClass(val post: DiscussionPost,
                       val comments: List<SampleComment>) : Parcelable

现在如何为数据类调用它?

【问题讨论】:

  • 你遇到了什么样的问题?你能解释一下吗?
  • 新场景如何使用?就像如何替换这个 -> SampleClass::create
  • 什么新场景..要使用哪个类?
  • 可以为SampleClass.create()添加代码

标签: android kotlin rx-android


【解决方案1】:

你可以使用SampleClass::new来调用构造函数。

【讨论】:

  • 啊,是的,如果对 zip 的调用仍然是 Java 并且没有翻译成 Kotlin,那么这是正确的答案。
  • 很高兴我能帮上忙 :)
  • 我的问题是否有问题,因为有人不喜欢它。我是新来的,所以如果问题错误或格式错误,如果你能帮助我理解它。
【解决方案2】:

如果我理解正确,您不需要构造函数调用,而是构造函数引用。它的语法is ::SampleClass。但这可能不会触发 SAM 转换,在这种情况下您需要

 Observable.zip(...,
                { post, comments -> SampleClass(post, comments) })

编辑:以上假设 zip 是从 Kotlin 调用的,如果您想从 Java 调用它,请参阅 @ebasha 的答案。

【讨论】:

  • 感谢您的帮助:)
猜你喜欢
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 2019-04-18
相关资源
最近更新 更多