Hello, I have an abstract class that I need to get its field to use on my decorator classes.
//methods are overriden in concrete componenets
abstract class AbstractStructs[A](implicit val ordng: Ordering[A]) extends Collection[A] {
protected var elements: List[A] = Nil
}
//trait
trait Collection[A] {
def push(element: A): Boolean
def pop(): Option[A]
def peek(): Option[A]
def size: Int = 0
}
//concrete component
class FIFOStruct[Int] extends AbstractStructs[Int]{
override def push(element: A): Boolean //implementation
override def pop(): Option[A] //implementation
override def peek(): Option[A] //implementation
override def size: Int = 0 //implementation
}
//struct decorator
abstract class StructDecorator[A](struct: Collection[A]) extends Collection[A]{
override def push(element: A): Boolean = {
struct.push(element: A)
}
override def pop(): Option[A] = {
struct.pop()
}
override def peek(): Option[A] = {
struct.peek()
}
override def size: Int = struct.size
}
//decorator for one of features
class PrimeDecorator[A](struct: Collection[A]) extends CollectionDecorator[A](struct){
override def push(element: A): Boolean = {
//method I create to compare for primes, needs access to elements field of Abstract Class AbstractStructs for comparison
def compare(elem: A, list: List[A]): Boolean = {
//implementation
}
//need to check method here, but "cannot resolve symbol elements"
if (prime(element, elements)) false
super.push(element)
}
Creating an instance of the abstract class will make me import all the methods twice which I don’t want. I must use the field protected var elements: List[A] = Nil
How can I access it?