Здравствуйте, Jack128, Вы писали:
J>·>А как package visibility позволит сделать exhaustiveness checking?
J>J>public class Expression {
J> internal Expression() {}
J>}
J>
J>объявить наследника Expression в другой сборке конечно можно. Но так как создать экземпляр этого наследника всё равно нельзя будет создать, то и в pattern matching таких наследников можно не учитывать.
В тех же плюсах такую же хрень можно через private+friend сделать.
В java — через приватный конструктор или интерфейс и inner-классы в качестве наследников. Здесь один недостаток(?), код всех таких классов должен лежать в одном .java-файле.
Правда, причём тут exhaustiveness checking?!.