kotlin - 在调用主要构造函数之前,如何运行代码?

标签 kotlin

我正在编写一个包含两个不可变值的类,这些值在主构造函数中设置。我想添加一个辅助构造函数,该结构接受一个字符串并对其进行解析以获取这两个值。但是,我无法在Kotlin中找到实现此方法的方法,因为辅助构造函数在解析字符串之前会立即调用主要构造函数。

在Java中,我会在其他构造函数之一中调用this(a,b),但是Java没有主要的构造函数。如何添加此功能?

class Object (a: double, b:double)
{
  val a = a
  val b = b
  constructor(str: String) //Parsing constructor
  {
    //Do parsing
    a = parsed_a
    b = parsed_b
  }
}

最佳答案

二级构造函数在Kotlin中是不利的。最好的解决方案是使用工厂方法。参见,例如:

class A(val a: Int, val b: Int) {
    companion object {
        fun fromString(str: String): A {
            val (foo, bar) = Pair(1, 2) // sub with your parsing stuff
            return A(foo, bar)
        }
    }
}

这将导致代码更具可读性。想象一下一个类,它具有十种不同的构造函数,除了MyClass之外,别无选择,而工厂方法启用了许多明显的类:MyClass.fromString(str: String)MyClass.fromCoordinates(coordinates: Pair<Int, Int>)等等。

直到最近才允许Kotlin中允许二级构造函数。

关于kotlin - 在调用主要构造函数之前,如何运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59439262/

相关文章:

kotlin - 如何在过滤器的错误处理中连接到 micronaut 服务器?

kotlin - 我如何发现Gradle中的configuration.default.collect意味着什么?

kotlin - 将类引用作为方法参数传递的最佳方法是什么?

reflection - 创建 KClass 的新实例

spring - 父表和子表之间的映射不正确

kotlin - 告诉Kotlin编译器任何先前的可调用函数已经检查过null的方法

Kotlin 生成将默认值设置为空参数的构造函数

android - 启动 Activity 时无法识别 Android Studio 中的类 Intent

kotlin - Kotlin Flow 的 GroupBy 运算符

java - 自己的SDK架构——Kotlin中的异步方法API