DEVELOPERS-GUIDE.html (93 lines of code) (raw):

<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <html> <head> <title>Developers guide for Apache Commons "Collections" Package</title> </head> <body> <div> <h1>The Apache Commons <em>Collections</em> Package</h1> <h2>Developer's Guide</h2> <ol> <li><a href="#Introduction">Introduction</a></li> <li><a href="#CollectionInterfaces">Collection Interfaces</a></li> <li><a href="#CollectionImplementations">Collection Implementations</a></li> <li><a href="#UtilityClasses">Utility Classes</a></li> <li><a href="#CodingStandards">Coding Standards</a></li> </ol> </div> <a id="Introduction"></a> <h3>1. INTRODUCTION</h3> <p>The <em>Collections</em> package contains a set of Java classes that extend or augment the Java Collections Framework. This developers guide seeks to set out rules for the naming of classes and methods within the package. The purpose of this, as with all naming standards, is to improve the coherency and consistency of the whole API.</p> <p>The philosophy of the naming standards is to follow those of java.util.Collections.</p> <a id="CollectionInterfaces"></a> <h3>2. COLLECTION INTERFACES</h3> <p>Collection interfaces are new types of collections not included in Java. Examples include <code>Bag</code> and <code>SortedBag</code>. These interfaces shall:</p> <ul> <li>be top level interfaces</li> <li>have a name that describes their purpose</li> </ul> <a id="CollectionImplementations"></a> <h3>3. COLLECTION IMPLEMENTATIONS</h3> <p>Collection implementation are new implementations of collection interfaces. Examples include <code>DoubleOrderedMap</code> and <code>DefaultMapBag</code>. These interfaces shall:</p> <ul> <li>be top level classes</li> <li>have a name that ends with the collection type being implemented</li> <li>have a name that describes their implementation</li> <li>contain no public inner classes</li> <li>only contain the collection implementation, and any methods specific to that implementation</li> </ul> <a id="UtilityClasses"></a> <h3>4. UTILITY CLASSES</h3> <p>Utility classes provide additional functionality around an interface and its basic implementations. Examples include CollectionUtils and ListUtils.</p> <p>Each class shall follow the naming pattern XxxUtils where Xxx relates to the object being returned by the class, for example <code>ListUtils</code> and <code>BagUtils</code>. Variations on a theme (<code>SortedBag</code> as opposed to <code>Bag</code>) will be dealt with in one Utils class. Each Utils class shall:</p> <ul> <li>be a single, static method based, class</li> <li>have a name consisting of the interface name plus 'Utils'</li> <li>deal with one collection interface and its variations</li> <li>provide methods that decorate the interface with additional functionality</li> <li>provide methods that perform useful utility functions on that interface</li> </ul> <p>Where the method in a Utils class is a decorator, the name shall consist of an adjective followed by the collection type. Typically, such adjective is formed by appending an -ed suffix (meaning "having"/"characterized by") to the word describing the type of decorator. For example, <code>synchronizedMap(Map)</code> or <code>predicatedSet(Set)</code>. Occasionally, such construct is awkward and a more suitable adjective can be used instead. For example, <code>lazyList</code>, <code>unmodifiableList</code>.</p> <p>These decorators should be implemented either as non-public, static, inner classes, or as public classes in a subpackage. If a subpackage is used, the constructors should be protected and a public static decorate() method provided on each class for construction.</p> <a id="CodingStandards"></a> <h3>5. CODING STANDARDS</h3> <p>Commons Collections follows similar style rules to many other Java open source projects, and the Sun conventions. Some specific conventions are:</p> <ul> <li>No tabs, 4 space indentations</li> <li>Curly brackets open at line end</li> <li>Else, catch and finally statements after the closing bracket</li> <li>Single space after keyword such as if</li> <li>Two spaces between parameter name and description in @param</li> <li>Generally copy the style of the surrounding code</li> </ul> <p>And remember, the commons-dev mailing list is there for any discussions or queries about patches or new additions to collections.</p> </body> </html>