Ich habe eine Klasse Stealth
Implementierung der Schnittstelle Skill
und eine Klasse SoundlessMovement
die Implementierung der Schnittstelle Mastery
. Jetzt möchte ich die Meisterschaft SoundlessMovement
der Skill
Stealth
hinzufügen, während die Mastery
durch die Skill
unterstützt wird.Ist es möglich, den Typ einer Liste auf eine Implementierung einer Schnittstelle in Kotlin zu beschränken?
Ich möchte so etwas wie dieses (Pseudo-Kotlin) tun:
interface Skill {
val masteries: List<Mastery<Skill>> // Mastery linked to type Skill
}
und
interface Mastery<Skill> { // Every Mastery must be compatible with only one Skill
val masteryName: String
}
mit Implementierungen:
class Stealth : Skill {
override val masteries: ArrayList<Mastery<Stealth>() // Any Mastery bound to Stealth
}
und
class SoundlessMovement : Mastery<Stealth> { // Is a Mastery compatible with Stealth
override val masteryName = "Soundless Movement"
}
Ziel ist es, sicherzustellen, dass einer Fertigkeit nur kompatible Meisterschaften hinzugefügt werden können. Ist so etwas überhaupt möglich? Und wenn ja, wie könnte es in Kotlin umgesetzt werden?
Ich bin mir bewusst, dass der Titel der Frage schlecht ist. Ich habe einfach keine Ahnung, wie ich das Problem besser beschreiben könnte. – zoku
Ihr Klassendesign ist nicht verständlich. Warum "Mastery" braucht einen generischen Parameter, aber nicht? Warum hält Skill eine Listenreferenz für seine Klasse? Können Sie erklären, was Sie erreichen wollen und Ihre Klassenbeziehung? – Joshua
@Joshua Die Struktur ist vereinfacht, um nur den problematischen Teil des Codes zu zeigen. Vereinfacht ausgedrückt versuche ich eine Klasse zu haben, die eine Schnittstelle implementiert, die eine Liste mit dem Typ einer anderen Klasse enthält, die eine andere Schnittstelle implementiert und an die erste Klasse gebunden ist. Ziel ist es, das Vermischen von Fertigkeiten und Meisterschaften zu verhindern, indem jede Meisterschaft an eine bestimmte Fähigkeit gebunden wird. Also ist Pelochos Antwort genau das, was ich versuchte zu tun. – zoku