(no title)
bronty | 12 years ago
@Currency("USD") double amount;
These annotations can be checked automatically using a compiler plug-in, such as the Checker Framework [1]. The Checker Framework comes pre-packaged with a units checker [2] along with checkers for null pointer errors, locks, string formatting, security, and many more.
Java's domain-specific language (DSL) features aren't as rich as Scala's. However, you could implement some DSL-like features using aspect-oriented programming (AOP) tools or other similar compiler plug-ins.
[1] http://types.cs.washington.edu/checker-framework/ [2] http://types.cs.washington.edu/checker-framework/current/che...
jf5s2|12 years ago
Given the choice I always pick Scala over Java. Maintaining legacy Java code with AspectJ, Lombok and other behind-your-back bytecode manipulations are literally the bane of my existence.
bronty|12 years ago
Using plug-ins for automated analysis improves the quality of your codebase. The annotations serve as a machine-checked documentation which make the code easier to debug.
As you point out though, the benefits of plug-ins for metaprogramming (such as implementing a DSL) is not always as clear-cut: you have to pay the price of maintenance, much of which is not always obvious up-front.
You face many of the same issues when designing a DSL in Scala --- the DSL may generate code that depends on a custom run-time or library.