【发布时间】:2021-02-25 14:59:44
【问题描述】:
我是 Kotlin 的新手,来自 JS(但无论如何我是一个非常业余、自学成才的程序员)。过去,我的方法是完成它,但我一直喜欢 Kotlin 的简洁性,并希望避免在我的程序中对类似元素进行不必要的复制。我想知道我是否能够获得有关父类的子类的一些指导。目前,我正在使用两种类型:
class Ratio(var num: Int, var den: Int) {
var monzo: MutableList<Int> = calculateMonzo(num, den)
var sizeInCents: Double = calculateCents(num, den)
var centDeviation: Pair<Double, String> = calculateCentDeviation(num, den, monzo)
var notation: Triple<String, String, String> = calculateNotation(monzo)
var frequency: Double = calculateFrequency(num, den)
}
和
class Monzo(var monzo: List<Int>) {
var num: Int = calculateRatio(monzo).first
var den: Int = calculateRatio(monzo).second
var sizeInCents: Double = calculateCents(num, den)
var centDeviation: Pair<Double, String> = calculateCentDeviation(num, den, monzo)
var hejiString: Triple<String, String, String> = calculateNotation(monzo)
var frequency: Double = calculateFrequency(num, den)
}
基本上,Ratio() 或 Monzo() 都表示相同的“事物”(分数或分数的质因数分解),并且仅取决于用户的首选输入。最后,我计算出“缺失”的信息,然后从那一点开始,属性和计算是相同的。这些将在父类中是有道理的,例如Input(),但我不确定如何最好地设置父类,然后在调用其中一个子类的实例时访问这些父属性。
【问题讨论】:
-
你不能只有一个类和两个构造函数吗?如果您需要知道它是 Ratio 还是 Monzo,最终添加一个枚举
-
这真的需要同时存储、返回和操作两种形式的数据(num/den 和int 列表)吗?对我来说,简洁的解决方案是标准化一种形式,只有一个类只存储该形式,然后提供一种从另一种形式创建它的方法(通过辅助构造函数或伴随对象中的工厂方法) 并从中创建其他表单(通过方法或具有自定义 getter 的属性)。
-
@Pawel 和 gidds 我当然可以想象一个单一的标准化。例如,素数分解“monzo”(List
)是更有用的形式,任何比率(num/den)都可以通过简单的函数轻松转换为 monzo。有什么方法可以给出一个使用辅助构造函数的非常基本的示例?我对细节感到不安......
标签: class kotlin inheritance