MultiJava is an extension to the Java programming language
that adds open classes and symmetric multiple dispatch. Open
classes allow programmers to add methods to existing classes
without editing those classes, or even having their source
code. Multiple dispatch allows the code invoked by a method
call to depend on the run-time type of all the arguments,
instead of just the receiver. This is useful for event
handlers and for binary methods, like
The MultiJava project provides mjc, a MultiJava compiler, that translates MultiJava programs to regular Java bytecode that will run on any standard Java Virtual Machine. We also provide mjdoc, for generating html documentation from javadoc comments. The project also includes a variant of MultiJava, called Relaxed MultiJava, that permits a greater range of program extension than MultiJava. Relaxed MultiJava provides this extensibility by replacing some compile-time errors with warnings and adding additional load-time checks.
The MultiJava project also serves as a framework for the tools of the Java Modeling Language, or JML. JML is a specification language for Java. JML supports specifications ranging from simple design-by-contract (think pre- and post-conditions) to full abstract modelling, which allows complete formal specification of behavior without exposing the implementation. JML tools built atop mjc include a specification type checker (jml), run-time assertion checker (jmlc), HTML documentation generator (jmldoc), and a facility for automatically generating JUnit test cases for classes from their specifications (jmlunit).
August 17, 2006
Version 1.3.2 Released!
The MultiJava project team is pleased to announce the release of version 1.3.2 of the MultiJava tool suite. This release adds support for the Universe type system. It also does not crash when used with JDK 1.5. However, it does not (yet) support the Java 5 source language.
December 14, 2004
Version 1.3.1 Released!
The MultiJava project team is pleased to announce the release of version 1.3.1 of the MultiJava tool suite. This is a bug fix release. The main fixes are to the compilation strategy for external generic functions. The fixes here cover two unanticipated cases: calls to external generic functions before static initialization is completed and loading of an external generic function in multiple concurrent threads.
December 12, 2004
We’re pleased to announce the availability of an updated paper on the MultiJava programming language. MultiJava: Design Rationale, Compiler Implementation, and Applications provides the most comprehensive and readable description of the language to date. The paper describes MultiJava’s open classes and multiple dispatch with a pair of motivating examples. It also describes the key techniques used in compiling MultiJava source code to run on the standard Java Virtual Machine. Finally, an extensive discussion of actual use cases for MultiJava provides insight into many useful applications of the language’s features.
August 16, 2004
Version 1.3 Released!
The MultiJava project team is pleased to announce the release of version 1.3 of the MultiJava tool suite. This release of MultiJava adds supports for the Universes type-system in MultiJava. The release also includes a few bug fixes and improved GUI support.
An archive of previous news items about the MultiJava project is available.
This web site is designed using XHTML 1.0 and CSS2. We highly recommend using the latest version of your favorite browser, not just for this site, but as a general guideline.
– The MultiJava Team
Page last modified Friday, August 18, 2006.