On Tue, Nov 10, 2009 at 03:05, Stephen Colebourne <scolebou...@joda.org>wrote:
> 2009/11/10 Mark Reinhold <m...@sun.com>: > > Yet ... how much of a problem is this outside of the JDK itself and, > > more generally, for new code rather than old? > > > > If there are n (for n <= 43) problematic uses in the JDK then we could > > just fix those without defining any new public API. For new code we > > should encourage people to use String.format("...%n...") rather than > > access the line.separator property explicitly. > > Commons Lang defines the class SystemUtils: > > http://commons.apache.org/lang/api-2.3/org/apache/commons/lang/SystemUtils.html > This has constants for all the main system properties. > > Within my work 1.4MLOC codebase, SystemUtils.LINE_SEPARATOR is used 65 > times, with a further 7 cases within other parts of Commons Lang > itself. This is a commonly used value. > > SystemUtils contains many more constants though. This is beneficial > for code clarity, and avoiding "magic" property names that are > difficult to find when you want them. While most are rarely used, all > will be used occasionally (otherwise why make them available). Asking > developers to use "magic" names for the well-defined common cases > seems non-sensical. > > As such I'm definitely in favour of line separator, but would also > want to see others (including common directory locations like IO > home). > I agree - I would also like to see a class that provides cheap and compile-time-checked access to standard system properties, like SystemUtils, but also guaranteeing to use doPrivileged to avoid security manager problems. But I don't think this would be accepted in core jdk, since some of the system properties like user.name have privacy/security implications, which someone must surely be depending on. System.lineSeparator() is a small step, but it's achievable. Martin