У меня такая иерархия классов.
abstract class Element {
var name: String
var description: String
}
class Group (var name : String, var description : String, var members: Set[Element] =Set())
extends Element{}
trait TypedElement extends Element{
var types: Set[Type]
}
trait ArchitecturalElement extends PropertyHolderElement with TypedElement
abstract class Component extends ConnectableElement with ArchitecturalElement {
var subElements : Set[ArchitecturalElement]
var interactionPoints : Set[InteractionPoint]
}
class SAComponent ( var name :String,
var description : String,
var types : Set[Type] = Set(),
var subElements : Set[ArchitecturalElement] = Set(),
var interactionPoints : Set[InteractionPoint] = Set()
) extends Component
Element — это корневой класс моей модели. Теперь я хочу поместить абстрактный метод «проверить» на элемент, который будет унаследован всеми моими классами. И реализовано только в бетоне. Как мне это сделать? Мои проверенные методы должны иметь разные подписи, и некоторые из них возвращают значение, а другие ничего не возвращают.
Например, я хотел бы что-то вроде этого:
abstract class Element {
var name: String
var description: String
def validate (elem: Element)
}
class Group (var name : String, var description : String, var members: Set[Element] =Set())
extends Element{
validate (gr: Group) = {//the method body}
}
trait TypedElement extends Element{
var types: Set[Type]
validate (ty : TypedElement )
}
trait ArchitecturalElement extends PropertyHolderElement with TypedElement {
validate (arel: ArchitecturalElement )
}
abstract class Component extends ConnectableElement with ArchitecturalElement {
var subElements : Set[ArchitecturalElement]
var interactionPoints : Set[InteractionPoint]
validate (el : Component, subElem: Set[ArchitecturalElement]) : Boolean = {//the method body}
//here, I need the return value to avoid cycles of recursion
}