У меня ситуация примерно такая:
package A
trait A1{
def a2 = 0
}
package B
trait B1{
def b2 = {
import A.A1._ // Error: trait A1 exists, but it has no companion object
a2
}
}
Это может быть не очень хороший дизайн, но в будущем он будет изменен. Есть ли способ обойти эту ошибку?
Вы не можете импортировать из определения признака. Но можно импортировать из экземпляра определения признака. A1
- это черта
import A.A1._
Вышеприведенное утверждение недействительно. Когда A.A1._
импортируется, компилятор Scala ищет объект A1
, но A1
является признаком, а A1
недоступен. Поэтому он жалуется, что у трейта A1
нет сопутствующего объекта.
Companion object is the object with the same name as class/trait definition
Если вы хотите импортировать признак A1
(определение признака) в область видимости. Просто делать
import A.A1
Вы можете импортировать внутреннюю часть объекта / сопутствующего объекта
object Bar {
val x = 1
}
import Bar._
Теперь x
доступен в объеме
Если Foo
является объектом, то import Foo._
действителен.
scala> trait A { val a = 1}
defined trait A
scala> val foo = new A{}
foo: A = $anon$1@9efcd90
scala> import foo._
import foo._
scala> a
res0: Int = 1