私は、Skill
インターフェイスとSoundlessMovement
インターフェイスを実装するクラスStealth
を持っており、インターフェイスMastery
を実装しています。今度はSkill
Stealth
に熟達度SoundlessMovement
を追加し、Skill
でMastery
を確実にサポートします。ListのタイプをKotlinのインターフェースの実装に制限することはできますか?
は、私は、この(擬似Kotlin)のような何かをしたい:
interface Skill {
val masteries: List<Mastery<Skill>> // Mastery linked to type Skill
}
と実装と
interface Mastery<Skill> { // Every Mastery must be compatible with only one Skill
val masteryName: String
}
:
class Stealth : Skill {
override val masteries: ArrayList<Mastery<Stealth>() // Any Mastery bound to Stealth
}
と
class SoundlessMovement : Mastery<Stealth> { // Is a Mastery compatible with Stealth
override val masteryName = "Soundless Movement"
}
を
目的は、互換性のあるマスターのみをスキルに追加できるようにすることです。 このようなことも可能ですか?そしてもしそうなら、Kotlinでどのように実装することができますか?
私は質問のタイトルが悪いと認識しています。私はちょうど問題をより良く記述する方法を知らない。 – zoku
あなたのクラスデザインは理解できません。なぜMasteryがジェネリックパラメータを必要としますが、それを使用していないのですか?なぜスキルはそのクラスのリスト参照を保持していますか?あなたが達成したいこととあなたのクラス関係を説明できますか? – Joshua
@Joshua構造は、コードの問題のある部分のみを表示するように単純化されています。簡単に言えば、別のインタフェースを実装しているファーストクラスにバインドされている別のクラスの型を持つリストを保持するインタフェースを実装するクラスを作成しようとします。目標は、それぞれの熟練を特定のスキルに結びつけることによって、スキルと熟練の混同を防ぐことです。 ペローコの答えはまさに私がやろうとしていたものです。 – zoku