我正在用 Kotlin 制作一個 android 游戲,我想知道我的列舉的使用。它看起來像這樣:
package com.example.makemoremeat.enumerations
import com.example.makemoremeat.R
enum class ProductionInformation(
val initialNumber: Double,
val initialCost: Double,
val initialProduction: Double,
val initialProductionTime: Double,
val coefficientCostUp: Double,
val imageProduction: Int
) {
Chicken(1.0, 1.0, 0.1, 1.0, 1.13, R.drawable.production_work_in_progress),
Beef(0.0, 7.0, 0.7, 2.0, 1.14, R.drawable.production_work_in_progress),
Mutton(0.0, 49.0, 4.9, 4.0, 1.15, R.drawable.production_work_in_progress),
Pork(0.0, 343.0, 34.3, 8.0, 1.16, R.drawable.production_work_in_progress),
Rabbit(0.0, 2401.0, 240.1, 16.0, 1.17, R.drawable.production_work_in_progress),
Horse(0.0, 16807.0, 1680.7, 32.0, 1.18, R.drawable.production_work_in_progress),
Caribou(0.0, 117650.0, 11765.0, 64.0, 1.19, R.drawable.production_work_in_progress),
Fish(0.0, 823540.0, 82354.0, 128.0, 1.20, R.drawable.production_work_in_progress),
Dog(0.0, 5764800.0, 576480.0, 256.0, 1.21, R.drawable.production_work_in_progress),
Elephant(0.0, 40354000.0, 4035400.0, 512.0, 1.22, R.drawable.production_work_in_progress),
Bugs(0.0, 282480000.0, 28248000.0, 1024.0, 1.23, R.drawable.production_work_in_progress),
Vegan(0.0, 1977300000.0, 197730000.0, 2048.01, 1.24, R.drawable.production_work_in_progress),
Cultured(0.0, 13841000000.0, 1384100000.0, 4096.0, 1.25, R.drawable.production_work_in_progress)
}
我這樣使用它:
class Production (
private val game: Game,
private val productionInformation: ProductionInformation
) {
val image = productionInformation.imageProduction
var numberPossessed = productionInformation.initialNumber
var actualCost =
productionInformation.initialCost * productionInformation.coefficientCostUp.pow(
numberPossessed - 1
)
var actualProduction = productionInformation.initialProduction
var actualProductionTime = productionInformation.initialProductionTime
[...]
干凈嗎?否則在這種情況下該怎么做?繼承擴展生產的 13 個類會更好嗎?謝謝你的幫助 !
uj5u.com熱心網友回復:
多個類的繼承肯定會更糟!這里沒有什么需要不同的類。這些專案都不需要唯一的屬性或函式型別。
在某些情況下,這是一個 OK 模式。但是,如果您真的不需要強制執行特定的、有限的一組可能的專案,那么一個普通的類,也許data是類就足夠了。例如,如果您不需要when在其上使用陳述句來區別對待每個可能的成員,或者能夠迭代所有可能的值,那么將其設為 Enum 類并不能真正為您帶來任何好處,并且它限制了您可以定義實體。您上面的代碼沒有理由說明這不應該只是一個資料類。
由于您有很多條目,因此可能應該從諸如 JSON 檔案預先準備的資料庫檔案之類的資源中加載它。
uj5u.com熱心網友回復:
enums或“列舉/列舉資料型別”,廣泛用于選擇構造,根據enum您提供的邏輯將遵循特定路徑的用例,請考慮以下內容,每個都由一個簡單的要求描述
Case 1:
冷食或熱食,如果顧客點冷食,給顧客穿夾克,如果顧客點熱食,給他一桶冰
enum class FoodOrderType {
COLD, HOT
}
在我的代碼中的某個地方
val foodType = customer.getOrderedFoodType()
when (foodType) {
FoodOrderType.COLD -> {
// free jacket
}
FoodOrderType.HOT -> {
// a bucket of ice
}
}
Case 2:
根據您汽車當前汽油的具體體積水平,決定是否繼續駕駛?準備好你的錢包?或尋找最近的加油站
enum class GasolineLevel {
FULL, HALF, QUARTER
}
在我的代碼中的某個地方
val gasolineLevel = car.getGasolineLevel()
when (gasLevel) {
GasolineLevel.FULL -> {
// continue driving
}
GasolineLevel.HALF -> {
// get your wallet ready
}
GasolineLevel.QUARTER -> {
// look for the nearest station
}
}
您可以看到上面的大多數示例都圍繞您code flow將如何決定繼續進行,但是在您的問題中,它似乎并不能保證“決定性”或“條件”代碼流的某些東西,它只是一個代表一系列的列舉某些構造的特征Inherited。
就我個人而言,我看到您的代碼屬于繼承設計,您的
- 雞
- 牛肉
- 羊肉
- 豬肉
- ETC...
繼承他們characteristics的ProductionInformation喜歡
class Chicken : ProductInformation{
...
}
或者
class Beef: ProductInformation{
...
}
或者更好的是,保持背景關系完整,您應該根據背景關系為類名添加后綴,如下所示
class ChickenProduct : ProductInformation {
...
}
或者
class BeefProduct : ProductInformation{
...
}
您的代碼沒有任何問題,但是某些OOP原則對于某些用例是有意義的。
編輯:我同意 Tenfour04,composition是您的用例最理想的設計策略,而不是一個臃腫的包/目錄,其中充滿了具有不同名稱的相似類,更喜歡組合而不是繼承
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516814.html
標籤:科特林枚举枚举
