Параметры класса

У класса может быть несколько параметров типа, с помощью которых можно добиваться расширяемого поведения класса. Например, класс Array имеет один параметр типа :
    class Array<T> {

        function new() {
            // ...
        }

        function get( pos : Int ) : T {
            // ...
        }

        function set( pos : Int, val : T ) : Void {
            // ...
        }
    }
Внутри класса Array, тип T является абстрактным и поэтому его поля и метода недоступны. Но когда вы объявляете массив вам нужно указать его тип : например Array<Int> или Array<String>. Это будет действовать также, как если бы вы заменили все типы T в объявлении Array на тип, который вы указали. Параметр типа очень полезен для строгой типизации контейнеров таких как Array, List, Tree... Вы можете определять свои собственные параметризованные классы с несколькими параметрами типа для собственного использования, когда вам это нужно. Ограниченные параметры Удобно иметь возможность определять абстрактные параметры, но также можно накладывать на них несколько ограничений для того, чтобы иметь возможность использовать их в реализации класса. Например:
    class EvtQueue<T : Event, EventDispatcher> {
        var evt : T;
        // ...
    }
Хотя полю evt в этом классе назначен тип его параметра, типизатор знает, что оно имеет оба типа - Event и EventDispatcher, поэтому он может получать к нему доступ, как если бы оно реализовывало оба класса. Позже, при создании EvtQueue, типизатор проверит расширяет(extends) или реализует(implements) параметр эти два типа - Event и EventDispatcher. Ограничения параметров типов - очень мощный продвинутый функционал, который может быть действительно полезен для написания гибкого, универсального кода, подходящего для использования в разных приложениях.

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>.

Подробнее о форматировании

CAPTCHA
Этот вопрос помогает предотвратить автоматический спам
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.
To prevent automated spam submissions leave this field empty.