【问题标题】:Kotlin multiple constructor error: declaration have same java signatureKotlin 多个构造函数错误:声明具有相同的 java 签名
【发布时间】:2019-10-19 02:47:35
【问题描述】:

我在FirebaseUserAuth 类中有两个构造函数,它给出了一个错误:声明具有相同的 java 签名。构造函数的参数不同。为什么它给出相同的签名错误? 如何解决?

class FirebaseUserAuth(private val auth: FirebaseAuth,
                       private val loginCallBack: ((LoginAuthData) -> Unit)?,
                       private val registerVM_CallBack: ((RegisterAuthData) -> Unit)?)
{

  constructor(auth: FirebaseAuth, loginCallBack: (LoginAuthData) -> Unit): this(auth, loginCallBack, null)
  constructor(auth: FirebaseAuth, registerCallBack: (RegisterAuthData) -> Unit): this(auth, null, registerCallBack)
}

错误

> Platform declaration clash:The following declarations have the same JVM
> signature (Lcom/google/fireBase/auth/FirebaseAuth;Lkotlin/jvm/
> functions/Function1;)V):
> 
>  • public constructor FirebaseUserAuth(auth: FirebaseAuth,
> loginCallBack: (LoginAuthData) -> Unit) defined.
> com.examgle.data.FirebaseUserAuth 
> 
>  • public constructor FirebaseUserAuth(auth: FirebaseAuth,
> registerCallBack: (RegisterAuthData) -> Unit) defined.
> com.examgle.data.FirebaseUserAuth

【问题讨论】:

  • 使用具有泛型函数参数的单个构造函数..
  • @ADM 谢谢!!!我使用了通用类型及其工作

标签: android kotlin higher-order-functions constructor-overloading multiple-constructors


【解决方案1】:
constructor(auth: FirebaseAuth, loginCallBack: (LoginAuthData) -> Unit)
constructor(auth: FirebaseAuth, registerCallBack: (RegisterAuthData) -> Unit)

这两个构造函数都与JAVA中的函数参数类型相同,都是Lkotlin/jvm/functions/Function1

通过以下方式检查:

  1. Menu > Tools > Kotlin > Show Kotlin Bytecode
  2. 点击Decompile按钮
  3. 检查java代码

我的建议是尽可能使用 default 参数而不是辅助构造函数:

class FirebaseUserAuth(private val auth: FirebaseAuth,
                       private val loginCallBack: ((LoginAuthData) -> Unit)? = null,
                       private val registerVM_CallBack: ((RegisterAuthData) -> Unit)? = null)
{
    ...
}

【讨论】:

  • 但是不同的数据类型 loginCallBack: (LoginAuthData) -> Unit) , registerCallBack: (RegisterAuthData) -> Unit) 在函数参数中
  • 尽管数据类型不同,但两者都是 java 中的函数
  • 有没有办法告诉编译器区分它
猜你喜欢
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多