2013-07-14 2 views
0

Я знаю, что Scala позволяет выводить из закрытого класса, если он помещен в тот же файл. Может быть есть специальная конструкция, а если нет, то имеет смысл, чтобы позволить что-то вроде этого:Запечатанный класс Scala «объем печати»

sealed[Derived/*, list of allowed to derive*/] class Base 
class Derived extends Base 

Этот синтаксис будет как «Степень защиты»:

class A{ 
    private[A] val value = 10 
} 

Так что позволит поместить Derived класс в отдельный файл.

+0

Вы пытаетесь найти способ поместить класс case в отдельный файл? – Mingyu

+0

В большинстве случаев - да? Но и для классов, которые не являются «случаем». – user4298319

+0

Имейте в виду, что «запечатанный» не является транзитивным по подклассам. I.e., 'sealed' применяется только к * прямым * подклассам класса с надписью' sealed'. Если какой-либо из этих подклассов (или признаков) не является «final», эти подклассы сами не запечатаны и могут быть дополнительно подклассифицированы. –

ответ

1

Запечатанный класс не может добавлять новые подклассы, кроме тех, что указаны в одном файле.

Причины дизайна

1 - Программисты только нужно беспокоиться о подклассах они уже знают о.

2 - Вы получаете лучшую поддержку компилятора, потому что компилятор будет отмечать отсутствующие комбинации шаблонов с предупреждающим сообщением.

+0

Может быть, имеет смысл разрешить только классы, которые находятся в одном пакете? – user4298319

+0

@ serg.f вы можете поиграть с Java-конструкторами конструкторов с защитой пакетов. – Bluu

+0

Очень сложно объединить тестовые материалы, если вы не создадите классы тестирования в этом файле – lisak