scalabook

Форк
0
/
extension-methods.md 
47 строк · 2.3 Кб

Методы расширения

Основная цель методов расширения (extension methods) - позволить добавлять новые функциональные возможности в закрытые классы. Представим, что у нас есть класс Circle

, но мы не можем изменить его исходный код. Например, он может быть определен следующим образом в сторонней библиотеке:

case class Circle(x: Double, y: Double, radius: Double)

Если необходимо добавить методы в этот класс, можно их определить как методы расширения, например:

extension (c: Circle)
def circumference: Double = c.radius * math.Pi * 2
def diameter: Double = c.radius * 2
def area: Double = math.Pi * c.radius * c.radius

Ключевое слово extension

объявляет о намерении определить один или несколько методов расширения для параметра, заключенного в круглые скобки. Как показано в примере выше, параметры типа Circle
затем могут быть использованы в теле методов расширения.

Теперь, если есть экземпляр Circle

с именем aCircle
, можно вызвать эти методы следующим образом:

val aCircle = Circle(0.0, 0.0, 1.0)
aCircle.circumference
// res0: Double = 6.283185307179586
aCircle.diameter
// res1: Double = 2.0
aCircle.area
// res2: Double = 3.141592653589793

Более подробно методы расширения раскрыты в соответствующей главе раздела "Абстракции".


Ссылки:

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.