私は抽象クラスを作成し、それを実装したクラスのコンパニオンオブジェクトの参照属性をメンバーを追加できるようにしたいと思います。このような何か(Scalaの擬似コード):スカラ:抽象クラスのコンパニオンオブジェクトのメンバーを要求することは
abstract class Fruit(cultivar: String) {
// How do I reference the implementing class's companion object here?
def isTastyCultivar(): Boolean = Fruit.tastyCultivars.contains(cultivar)
}
// how do I implement what I am thinking of as "the abstract companion object"
abstract object Fruit {
val tastyCultivars: Set[String] // must be implemented
// by the concrete object
}
class Apple(cultivar: String) extends Fruit(cultivar) {
}
object Apple extends Fruit{ // presumably this is not correct;
// it needs to extend the FruitObject
// or whatever it is
val tastyCultivars: Set[String] = Set("Red Delicious", "Granny Smith")
}
class Tomato(cultivar: String) extends Fruit(cultivar) {
}
object Tomato extends Fruit{
val tastyCultivars = Set("Roma")
}
val a1 = new Apple("Red Delicious")
val a2 = new Apple("Honeycrisp")
a1.isTastyCultivar() // should return true
a2.isTastyCultivar() // should return false
val t1 = new Tomato("Roma")
val t2 = new Tomato("San Marzano")
t1.isTastyCultivar() // should return true
t2.isTastyCultivar() // should return false
申し訳ありませんが、これはばかな質問である場合、または(私が簡単に検索できなかったので、私はどのように言葉この質問をするに自信がないんだけど)以前に依頼された場合。前もって感謝します!
あなたの問題は、これらの 'isTastyCultivar'メソッドの作成を強制する方法ですか? –
2つの問題。 isTastyCultivarでは具体的なオブジェクト(Fruit.tastyCultivarsを置き換えるもの)と2つの具体的なオブジェクトをどのように参照するのですか?2つの具体的なオブジェクトでtastyCultivarsの宣言を強制するには –
つまり、特に再定義する必要はありません各具体クラスのisTastyCultivar()メソッド –