對不起,我對 Scala 很陌生。
我的代碼如下所示。
abstract class A{
val container: Any
//Some other member and methods are hidden
}
class B extends A {
val container: Vector(1,2)
//Some other member and methods are hidden
}
class C extends A {
val container: ArrayBuffer(1,2,3)
//Some other member and methods are hidden
}
所以,當我想在下面的主函式中使用這些函式時,這意味著我打算通過索引訪問容器。
val vector = new ArrayBuffer[A].empty
vector = new B
vector = new C
for( vec <- vector ){
println(vec.container(0))
}
但是,編譯器說“任何不帶引數”
所以,我的問題是,我應該如何在基類中宣告值容器以使用索引訪問輸入。
幫幫我,謝謝。
uj5u.com熱心網友回復:
至少有 2 個變體:
import scala.collection.mutable.ArrayBuffer
import scala.collection.immutable.Vector
import scala.collection.IndexedSeq
// variant 1
trait A1[T] {
def container: IndexedSeq[T]
}
class B1 extends A1[Int] {
val container: Vector[Int] = Vector(1, 2)
}
class C1 extends A1[Long] {
val container: Vector[Long] = Vector(1, 2)
}
// variant 2
trait A2 {
def container: IndexedSeq[_]
}
class B2 extends A2 {
val container: Vector[Int] = Vector(1, 2)
}
class C2 extends A2 {
val container: ArrayBuffer[Long] = ArrayBuffer(1, 2)
}
object Main extends App {
val coll1 = new ArrayBuffer[A1[_]]()
coll1 = new B1()
coll1 = new C1()
val coll2 = new ArrayBuffer[A2]()
coll2 = new B2()
coll2 = new C2()
for( vec <- coll1 ) {
println(vec.container(0))
}
for( vec <- coll2 ) {
println(vec.container(0))
}
}
在Scala 2.13.6 上測驗
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465536.html
上一篇:如何自動填充抽象屬性?
