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. - Override
toString()
For most classes, thetoString()
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. - Implement
serializable
All classes should implement serializable, accompanied by aprivate static final long serialVersionUID = #L;
, where # is a long formatted as yyyymmdd, e.g.20171024
for the 24th of October, 2017. - Override
equals()
?
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
hashCode()
Whenever an equals() method is defined, ahashCode()
method should also be defined, consistently with attributes considered in equals(). - Implement
Comparable<Class>
?
For classes that are likely to be ordered, theComparable<Class>
interface should be implemented. - Uncaught exceptions in
@throws
All uncaught exceptions that a method may throw, should be documented in the Javadoc under the@throws
tag. - 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 benull
, or a value should be positive. For such checks OTS provides several easy and shortThrow.when(...)
orThrow.whenNull(...)
methods. - The above rules also hold for inner-classes
Suggested reading
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
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
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.
Project Reports
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.