У меня есть абстрактный класс, например, так:
abstract class Base {
val myInners = mutable.ArrayBuffer[Inner[Any]]()
abstract class Inner[+T] {
myInners += this
def get: T
// other functionality here
}
implicit def innerToValue[T](inner: Inner[T]) = inner.get
class IntInner extends Inner[Int] { ... }
class StringInner extends Inner[String] { ... }
...
}
Изначально у меня был одноэлементный объект, такой как
object MyObject extends Base {
val intVal = new IntInner()
val stringVal = new StringInner()
...
}
И я мог использовать эти члены объекта в другом месте, например, functionThatExpectsAnInteger(MyObject.intVal)
что сделало меня счастливым:).
Однако, чтобы улучшить тестируемость, я бы хотел превратить это object
в class
и внедрить экземпляр этого класса, где бы он ни использовался.Однако, превращая MyObject
в класс, я, похоже, больше не могу использовать это неявное преобразование независимо от того, что я пытался, что меня огорчает: (.
Конечно, это преобразование только спасает менявызов метода get
, и я могу жить без него, но я все еще узнаю о последствиях для scala, и я хотел бы понять, почему это не работает и если - это способ сделатьэто.