The OpenTrafficSim core is written in Java 8.
OTS commit checklist
This checklist can be used so see whether code is suitable for committing to the project.
- Checkstyle and code formatter
Have you considered all checkstyle warnings (and solved or knowingly suppressed them), and have you formatted/indented the code (Ctrl+Shift+F in Eclipse) according to the default OTS formatting (see Setting up Eclipse)?
- Compiler warnings and error
Committing code with compiler errors should be avoided at all times. Warnings should be payed attention to.
For most classes, the
toString()method should be overridden. For purposes of debugging and understanding, objects should be able to meaningfully report what they are. In some cases, a superclass may have a sufficient implementation.
All classes should implement serializable, accompanied by a
private static final long serialVersionUID = #L;, where # is a long formatted as yyyymmdd, e.g.
20171024for the 24th of October, 2017.
The equals method should be implemented for all classes that are probable to be used for equality checks. The default java implementation checks for pointer equivalence, which can in many cases give a wrong result, especially in distributed serialization/deserialization or multiple JVM settings.
- Then also override
Whenever an equals() method is defined, a
hashCode()method should also be defined, consistently with attributes considered in equals().
For classes that are likely to be ordered, the
Comparable<Class>interface should be implemented.
- Uncaught exceptions in
All uncaught exceptions that a method may throw, should be documented in the Javadoc under the
- Pre- and post-conditions
In OTS we apply a fail-fast principle. This means that methods should check whether input meets the requirements. For instance, a pointer may not be
null, or a value should be positive. For such checks OTS provides several easy and short
- The above rules also hold for inner-classes
The OTS Programming standards are very much in line with the book Joshua Bloch - Effective Java. Note that this is a book about java programming practices, and not intended as an introduction to java.
Directory tree structure
ots-core src main java org.opentrafficsim.core.packageName ClassFileName.java resources localepackageName[_XX].properties test java org.opentrafficsim.core.packageName TestClassFileName.java resources testResourceFileName pom.xml
Java Generics are used to prevent accidental assignments of a speed value to a force, the ID of a ship to a container, etc. If at all possible we want the compiler to stop us from writing such assignments. If that really is impossible or creates very slow code, we like to see a runtime exception as early as possible.
Unit tests ensure that everything is tested at the lowest feasible level. It would waste a lot of time if, during a traffic simulation run, we find that our conversion from miles to kilometers is wrong. Errors like that should be cought earlier and at a much lower level.
The maven site-deploy operation will run all unit tests and create many reports that help to find errors in the JavaDoc comments, shortcomings in the unit tests, code style, duplicate code, etc.