приватний [] або захищений [] модифікатор доступу, безумовно, не допоможе. Чи відсутня ця функція?
Відповіді:
5 за відповідь № 1Це неможливо зробити з обмеженнями доступу до методу, визначеними мовою, але ви можете емулювати його неявними аргументами
// A.scala
trait A {
def foo(i: Int)(implicit accessKey: B.AccessKey) = {
println(s"A = $i")
}
}
// B.scala
object B {
sealed trait AccessKey
}
trait B {
private[B] implicit object AccessKeyInstance extends AccessKey
def bar(a: A) = a.foo(10)
}
// C.scala
trait C {
def bar(a: A) = a.foo(20) // Implicit not found error
}
Ви можете розмістити лише один неявний екземпляр AccessKey за ознакою B, і риса C не матиме доступу до неї.
Однак цей трюк не працює, якщо ви помістіть риси B та C у файлі single-scala, у цьому випадку ви зможете створити другий екземпляр AccessKey.