Exporting non-public type through public API
- by feelgood
What if I have few factory methods returning non-public type and pairing set of methods which gives variables of this non-public type? This results with titled warning message in NetBeans.
In result public API will contain only two pairing sets of methods. The reason is to make my type hierarchy sealed (like seald classes in Scala) and allow users only instantiate these types through factory methods. So we get DSL in some sense.
For example, Schedule class represented by calendar fields' contraints. There are some types of contraints - Range, Singleton, List, FullSet - with NumberSet interface as a root. We don't want to expose these types and how Schedule interact with them. We just want the specification from the user. So we make NumberSet package-private. In class Schedule we create few factory-methods for constraints:
NumberSet singleton(int value);
NumberSet range(int form, int to);
NumberSet list(NumberSet ... components);
and some methods for creating Schedule object:
Schedule everyHour(NumberSet minutes);
Schedule everyDay(NumberSet minutes, NumberSet hours);
User can only use them in the manner:
Schedule s = Schedule.everyDay( singleton(0), list(range(10-15), singleton(8)) );
Is it bad idea?