Заявление
self =>
называется «аннотацией собственного типа» и создает значение с именем self
, которое относится к экземпляру создаваемого класса. Это можно использовать в местах, где значение this
для класса недоступно. В частности, его можно использовать внутри вложенного класса, где this
относится к вложенному классу, а ссылка на внешний класс не доступна автоматически.
В вашем случае self
используется здесь:
new SparkSubmitArguments(args) {
override protected def logInfo(msg: => String): Unit = self.logInfo(msg)
override protected def logWarning(msg: => String): Unit = self.logWarning(msg)
}
Это заставляет новый экземпляр SparkSubmitArguments
использовать методы logInfo
и logWaringing
из внешнего содержащего класса. Вы не можете использовать this
в этой точке кода, потому что он будет ссылаться на внутренний класс, а не на внешний класс. (Если вы здесь используете this
, вы получите бесконечный цикл)