| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width,initial-scale=1"> |
| <title>Coding Standards :: Apache Felix</title> |
| <link rel="canonical" href="https://felix.apache.org/documentation/development/coding-standards.html"> |
| <meta name="generator" content="Antora 2.3.4"> |
| <link rel="stylesheet" href="../../_/css/site.css"> |
| <link rel="icon" href="../../_/img/favicon.png" type="image/x-icon"> |
| </head> |
| <body class="article"> |
| <header class="header"> |
| <nav class="navbar"> |
| <div class="navbar-brand"> |
| <a class="navbar-item" href="https://felix.apache.org/index.html"> |
| <span> |
| <img src="../../_/img/logo.png"> |
| </span> |
| </a> |
| <button class="navbar-burger" data-target="topbar-nav"> |
| <span></span> |
| <span></span> |
| <span></span> |
| </button> |
| </div> |
| <div id="topbar-nav" class="navbar-menu"> |
| <div class="navbar-end"> |
| <a class="navbar-item" href="https://felix.apache.org/index.html">Home</a> |
| <div class="navbar-item has-dropdown is-hoverable"> |
| <a class="navbar-link" href="#">Subprojects</a> |
| <div class="navbar-dropdown"> |
| <a class="navbar-item" href="../subprojects/apache-felix-dependency-manager.html">Dependency Manager</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-event-admin.html">Event Admin</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-file-install.html">File Install</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-framework.html">Framework</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-gogo.html">Gogo Shell</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-healthchecks.html">Health Checks</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-inventory.html">Inventory</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-log.html">Log</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-logback.html">Logback</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-maven-bundle-plugin.html">Maven bundle plugin</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-maven-scr-plugin.html">Maven SCR plugin</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-metatype-service.html">Metatype Service</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-preferences-service.html">Preferences Service</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-remote-shell.html">Remote Shell</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-script-console-plugin.html">Script console plugin</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-shell.html">Lightweight shell</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-shell-tui.html">Shell TUI</a> |
| <a class="navbar-item" href="../subprojects/apache-felix-web-console.html">Web Console</a> |
| </div> |
| </div> |
| <div class="navbar-item"> |
| <span class="control"> |
| <a class="button is-primary" href="../downloads.html">Downloads</a> |
| </span> |
| </div> |
| </div> |
| </div> |
| </nav> |
| </header> |
| <div class="body"> |
| <div class="nav-container" data-component="documentation" data-version="master"> |
| <aside class="nav"> |
| <div class="panels"> |
| <div class="nav-panel-menu is-active" data-panel="menu"> |
| <nav class="nav-menu"> |
| <h3 class="title"><a href="../index.html">Documentation</a></h3> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="0"> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="1"> |
| <a class="nav-link" href="../documentation.html">Documentation</a> |
| </li> |
| <li class="nav-item" data-depth="1"> |
| <a class="nav-link" href="../downloads.html">Downloads</a> |
| </li> |
| <li class="nav-item" data-depth="1"> |
| <a class="nav-link" href="../getting-started.html">Getting Started</a> |
| </li> |
| <li class="nav-item" data-depth="1"> |
| <a class="nav-link" href="../news.html">News</a> |
| </li> |
| <li class="nav-item" data-depth="1"> |
| <button class="nav-item-toggle"></button> |
| <span class="nav-text">Community</span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../community/project-info.html">Apache Felix Project Info</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../community/contributing.html">Contributing</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../community/projects-using-felix.html">Projects Using Felix</a> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="1"> |
| <button class="nav-item-toggle"></button> |
| <span class="nav-text">Development</span> |
| <ul class="nav-list"> |
| <li class="nav-item is-current-page" data-depth="2"> |
| <a class="nav-link" href="coding-standards.html">Coding Standards</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="dependencies-file-template.html">DEPENDENCIES file template</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="provisional-osgi-api-policy.html">Provisional OSGi API Policy</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="release-management-nexus.html">Release Management</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="site-how-to.html">Site How To</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="using-the-osgi-compliance-tests.html">Using the OSGi Compliance Tests</a> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="1"> |
| <button class="nav-item-toggle"></button> |
| <a class="nav-link" href="../faqs.html">FAQS</a> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../faqs/apache-felix-bundle-plugin-faq.html">Apache Felix Bundle Plugin Frequently Asked Questions</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../faqs/apache-felix-scr-plugin-faq.html">Apache Felix SCR Plugin Frequently Asked Questions</a> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="1"> |
| <button class="nav-item-toggle"></button> |
| <a class="nav-link" href="../subprojects.html">Subprojects</a> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="2"> |
| <button class="nav-item-toggle"></button> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager.html">Apache Felix Dependency Manager</a> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <button class="nav-item-toggle"></button> |
| <span class="nav-text">Guides</span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/migrating-from-earlier-versions.html">Apache Felix Dependency Manager - Migrating from earlier versions</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/annotations.html">Dependency Manager - Annotations</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/background.html">Dependency Manager - Background</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/bundles-and-dependencies.html">Dependency Manager - Bundles and Dependencies</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/design-patterns.html">Dependency Manager - Design Patterns</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/development.html">Dependency Manager - Development</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/history.html">Dependency Manager - History</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/javadocs.html">Dependency Manager - JavaDocs</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/migrating-from-other-solutions.html">Dependency Manager - Migrating from other solutions.</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/performance-tuning.html">Dependency Manager - Performance Tuning</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/resources.html">Dependency Manager - Resource adapters</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/whatsnew.html">Dependency Manager - What’s new in version 4?</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/dm-lambda.html">Dependency Manager Lambda</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/guides/whatsnew-r15.html">What’s New in R15</a> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <button class="nav-item-toggle"></button> |
| <span class="nav-text">Reference</span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/component-adapter.html">Dependency Manager - Adapter</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/component-aspect.html">Dependency Manager - Aspect</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/component-bundle-adapter.html">Dependency Manager - Bundle Adapter</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/dependency-bundle.html">Dependency Manager - Bundle Dependency</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/components.html">Dependency Manager - Components</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/dependency-configuration.html">Dependency Manager - Configuration Dependency</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/dependencies.html">Dependency Manager - Dependencies</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/external-links.html">Dependency Manager - External Links</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/component-factory-configuration-adapter.html">Dependency Manager - Factory Configuration Adapter Service</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/component-resource-adapter.html">Dependency Manager - Resource Adapter</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/dependency-resource.html">Dependency Manager - Resource Dependency</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/dependency-service.html">Dependency Manager - Service Dependency</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/service-scopes.html">Dependency Manager - Service Scopes</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/component-singleton.html">Dependency Manager - Singleton Component</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/thread-model.html">Dependency Manager - Thread Model</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/reference/dm-annotations.html">Dependency Manager Annotations</a> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <button class="nav-item-toggle"></button> |
| <span class="nav-text">Tutorials</span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/tutorials/working-with-annotations.html">Dependency Manager - Annotations</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/tutorials/getting-started.html">Dependency Manager - Getting Started</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/tutorials/leveraging-the-shell.html">Dependency Manager - Leveraging the shell</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-dependency-manager/tutorials/sample-code.html">Dependency Manager sample projects</a> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-event-admin.html">Apache Felix Event Admin</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-file-install.html">Apache Felix File Install</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <button class="nav-item-toggle"></button> |
| <a class="nav-link" href="../subprojects/apache-felix-framework.html">Apache Felix Framework</a> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../subprojects/apache-felix-framework/apache-felix-framework-bundle-cache.html">Apache Felix Framework Bundle Cache</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../subprojects/apache-felix-framework/apache-felix-framework-configuration-properties.html">Apache Felix Framework Configuration Properties</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../subprojects/apache-felix-framework/apache-felix-framework-faq.html">Apache Felix Framework Frequently Asked Questions</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../subprojects/apache-felix-framework/apache-felix-framework-launching-and-embedding.html">Apache Felix Framework Launching and Embedding</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../subprojects/apache-felix-framework/apache-felix-framework-usage-documentation.html">Apache Felix Framework Usage Documentation</a> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-framework-security.html">Apache Felix Framework Security</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <button class="nav-item-toggle"></button> |
| <a class="nav-link" href="../subprojects/apache-felix-gogo.html">Apache Felix Gogo</a> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../subprojects/apache-felix-gogo/rfc-147-overview.html">RFC 147 Overview</a> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-healthchecks.html">Apache Felix Health Checks</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-inventory.html">Apache Felix Inventory Printer</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-log.html">Apache Felix Log</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-logback.html">Apache Felix Logback</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-maven-bundle-plugin-bnd.html">Apache Felix Maven Bundle Plugin (BND)</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-metatype-service.html">Apache Felix Metatype Service</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-osgi-bundle-repository.html">Apache Felix OSGi Bundle Repository (OBR)</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-preferences-service.html">Apache Felix Preferences Service</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-remote-shell.html">Apache Felix Remote Shell</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-shell.html">Apache Felix Shell</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../subprojects/apache-felix-shell-tui.html">Apache Felix Shell TUI</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <button class="nav-item-toggle"></button> |
| <a class="nav-link" href="../subprojects/apache-felix-web-console.html">Apache Felix Web Console</a> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../subprojects/apache-felix-web-console/extending-the-apache-felix-web-console.html">Extending the Apache Felix Web Console</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../subprojects/apache-felix-web-console/web-console-restful-api.html">Web Console RESTful API</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../subprojects/apache-felix-web-console/web-console-security-provider.html">Web Console Security Provider</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <button class="nav-item-toggle"></button> |
| <span class="nav-text">Extensions</span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/branding-the-web-console.html">Branding the Web Console</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/providing-resources.html">Providing Resources</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/providing-web-console-plugins.html">Providing Web Console Plugins</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/web-console-logging.html">Web Console Logging</a> |
| </li> |
| <li class="nav-item" data-depth="4"> |
| <a class="nav-link" href="../subprojects/apache-felix-web-console/extending-the-apache-felix-web-console/web-console-output-templating.html">Web Console Output Templating</a> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="1"> |
| <button class="nav-item-toggle"></button> |
| <a class="nav-link" href="../tutorials-examples-and-presentations.html">Tutorials</a> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-application-demonstration.html">Apache Felix Application Demonstration</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-tutorial.html">Apache Felix OSGi Tutorial</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-faq.html">OSGi Frequently Asked Questions</a> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <button class="nav-item-toggle"></button> |
| <span class="nav-text">OSGI Tutorial</span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-tutorial/apache-felix-tutorial-example-1.html">Apache Felix Tutorial Example 1 - Service Event Listener Bundle</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-tutorial/apache-felix-tutorial-example-2.html">Apache Felix Tutorial Example 2</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-tutorial/apache-felix-tutorial-example-2b.html">Apache Felix Tutorial Example 2b</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-tutorial/apache-felix-tutorial-example-3.html">Apache Felix Tutorial Example 3</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-tutorial/apache-felix-tutorial-example-4.html">Apache Felix Tutorial Example 4</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-tutorial/apache-felix-tutorial-example-5.html">Apache Felix Tutorial Example 5</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-tutorial/apache-felix-tutorial-example-6.html">Example 6 - Spell Checker Service Bundle</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-tutorial/apache-felix-tutorial-example-7.html">Example 7 - Spell Checker Client Bundle</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-tutorial/apache-felix-tutorial-example-8.html">Example 8 - Spell Checker Service using Service Binder</a> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <a class="nav-link" href="../tutorials-examples-and-presentations/apache-felix-osgi-tutorial/apache-felix-tutorial-example-9.html">Example 9 - Spell Checker Service using Declarative Services</a> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="1"> |
| <a class="nav-link" href="../license.html">Apache License 2.0</a> |
| </li> |
| <li class="nav-item" data-depth="1"> |
| <a class="nav-link" href="../site-map.html">Site map</a> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </nav> |
| </div> |
| <div class="nav-panel-explore" data-panel="explore"> |
| <div class="context"> |
| <span class="title">Documentation</span> |
| <span class="version">master</span> |
| </div> |
| <ul class="components"> |
| <li class="component is-current"> |
| <span class="title">Documentation</span> |
| <ul class="versions"> |
| <li class="version is-current is-latest"> |
| <a href="../index.html">master</a> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </aside> |
| </div> |
| <main class="article"> |
| <div class="toolbar" role="navigation"> |
| <button class="nav-toggle"></button> |
| <a href="../index.html" class="home-link"></a> |
| <nav class="breadcrumbs" aria-label="breadcrumbs"> |
| <ul> |
| <li><a href="../index.html">Documentation</a></li> |
| <li>Development</li> |
| <li><a href="coding-standards.html">Coding Standards</a></li> |
| </ul> |
| </nav> |
| <div class="edit-this-page"><a href="https://github.com/apache/felix-antora-site/edit/main/modules/ROOT/pages/development/coding-standards.adoc">Edit this Page</a></div> |
| </div> |
| <div class="content"> |
| <article class="doc"> |
| <h1 class="page">Coding Standards</h1> |
| <div class="sect1"> |
| <h2 id="_guidelines_summary"><a class="anchor" href="#_guidelines_summary"></a>Guidelines Summary</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>This style guide is intended to help the computer professional produce better Java programs. |
| It presents a set of specific guidelines for using the features of Java in a disciplined manner. |
| The goal is to develop high quality, reliable, reusable, portable software. |
| For a number of reasons, no programming language can ensure the achievements of these desirable objectives on its own. |
| Programming must be embedded in a disciplined development process that addresses a number of topics in a well managed way. |
| The use of Java is one of those. |
| It must conform to good programming practices be based on well established software engineering principles. |
| This style guide is intended to bridge the gap between these principles and the actual practice of programming in Java.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Clear, readable, understandable source text eases program evolution, adaptation and maintenance. |
| First, such source text is more likely to be correct and reliable. |
| Second, effective code adaptation is a prerequisite to code reuse, a technique that has the potential for drastic reductions in system development costs. |
| Easy adaptation requires thorough understanding of the software, and that is facilitated considerably by clarity. |
| Finally, since maintenance (really evolution) is a costly process that continues throughout the life of a system, clarity plays a major role in keeping maintenance costs down. |
| Over the entire life cycle, code has to be read and understood far more often than it is written; |
| the investment of effort in writing readable, understandable code is thus well worthwhile. |
| Many of the guidelines in this style guide are designed to promote clarity of the source text.</p> |
| </div> |
| <div class="paragraph"> |
| <p>This style guide is intended for those involved in the development of real software systems written in Java. |
| Different roles in a software project can exploit the style guide in different ways. |
| The programmer can use it as a reference on good Java style. |
| It can be used in code reviews as a common reference. |
| Finally, lessons learned in real projects can be captured by extending the style guide.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_class_layout_and_comments"><a class="anchor" href="#_class_layout_and_comments"></a>Class layout and comments</h2> |
| <div class="sectionbody"> |
| <div class="sect2"> |
| <h3 id="_files_and_filenames"><a class="anchor" href="#_files_and_filenames"></a>Files and filenames</h3> |
| <div class="paragraph"> |
| <p>Files longer than 2000 lines are cumbersome and should be avoided.</p> |
| </div> |
| <div class="sect3"> |
| <h4 id="_file_names"><a class="anchor" href="#_file_names"></a>File names</h4> |
| <div class="paragraph"> |
| <p>The file must be named after the class it represents. |
| As for most cases each file contains only one class, this is an easy naming convention. |
| For nested or inner classes the name of the main class must be the name of the file. |
| As names in Java are case-sensitive, the filename is case-sensitive also.</p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_file_organization"><a class="anchor" href="#_file_organization"></a>File organization</h4> |
| <div class="paragraph"> |
| <p>Each Java source file contains a single class or interface. |
| Of course, this excludes inner classes as these must be defined without an (outer) class, and thus in the same file.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Java source files have the following ordering:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Beginning comments</p> |
| </li> |
| <li> |
| <p>Package and import statements</p> |
| </li> |
| <li> |
| <p>Class and interface declarations</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_beginning_comments"><a class="anchor" href="#_beginning_comments"></a>Beginning comments</h4> |
| <div class="paragraph"> |
| <p>All source files must begin with the comments shown in the following code sample.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text"> /* |
| * 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. |
| */</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Note that this comment part is not according to the JavaDoc style (See: How to write doc comments for JavaDoc - Sun Microsystems, Inc.) as this is file specific information that is not relevant in generated API documentation.</p> |
| </div> |
| <div class="sect4"> |
| <h5 id="_package_and_import_statements"><a class="anchor" href="#_package_and_import_statements"></a>Package and import Statements</h5> |
| <div class="paragraph"> |
| <p>The first non-comment line of most Java source files is a package statement. |
| After an empty line import statements can follow. |
| For example:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">package org.apache.felix.whatever.this.is; |
| |
| import java.awt.Frame; |
| import java.io.InputStream; |
| import java.util.Vector;</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>A few notes must be made here:</p> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic"> |
| <li> |
| <p>Package rules. |
| When not using an explicit package statement in your code the code still is in a package, the default package. |
| This easily results in name clashes and as package naming should be a part of the design, always use an explicit package name. |
| For naming rules of packages see 3.4 Naming conventions.</p> |
| </li> |
| <li> |
| <p>Import statements need to be explicit in order to overcome name clashes. |
| They should be grouped by name. |
| When the number of import statements of the same package exceeds the 'readability' limit (please use common sense), then import the complete package by adding '.*'.</p> |
| </li> |
| <li> |
| <p>Import order. |
| First in this section should be the standard Java imports like: java.lang.Throwable. |
| Second should be the Java extensions (i.e. |
| javax), third, the third party stuff. |
| Finally the project-specific imports should be added.</p> |
| </li> |
| </ol> |
| </div> |
| </div> |
| <div class="sect4"> |
| <h5 id="_class_and_interface_declarations"><a class="anchor" href="#_class_and_interface_declarations"></a>Class and interface Declarations</h5> |
| <div class="paragraph"> |
| <p>The following comment block is an example for the comment that belongs to the declaration of a class or an interface. |
| The combination of JavaDoc syntax and keywords that are expanded by the source integrity tool result in the following block:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> /** |
| * This class is not really a class, because this file is just |
| * a template that shows how the file header and class header |
| * should look like. |
| * |
| * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a> |
| */</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The following table describes the parts of a class or interface declaration, in the order that they should appear.</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <colgroup> |
| <col style="width: 50%;"> |
| <col style="width: 50%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Part of Class/Interface Declaration</th> |
| <th class="tableblock halign-left valign-top">Notes</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Class/Interface documentation</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">According to comment block as shown above.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Class or interface statement</p></td> |
| <td class="tableblock halign-left valign-top"></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Class (static) variables</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">These should be grouped by functionality rather than by scope.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Instance variables</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">These should be grouped by functionality rather than by scope.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Constructors</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Start with the default constructor if any.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Methods that belong to the class (see also 2.1.3.4 Class methods versus specific interface methods and event methods)</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">These methods should also be grouped by functionality rather than by scope or accessibility. |
| E.g. |
| a private class method can be in between two public instance methods. |
| The goal is to make reading and understanding the code easier. |
| When implementing an interface, group the methods that are part of the interface.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Methods of interfaces that are implemented by the class.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Automatically grouped by functionality if grouped by interface.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Inner classes</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">As they are only visible within their top-level class, they are placed at the bottom of the file.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_indentation"><a class="anchor" href="#_indentation"></a>Indentation</h3> |
| <div class="paragraph"> |
| <p>Four spaces should be used as unit of indentation. |
| Use spaces or let your editor convert tabs to spaces as some editors might show the tabs different than they were intended! |
| Tabs must be set exactly every 4 spaces.</p> |
| </div> |
| <div class="sect3"> |
| <h4 id="_line_length"><a class="anchor" href="#_line_length"></a>Line length</h4> |
| <div class="paragraph"> |
| <p>There is no explicit limit for the length of a line. |
| Make sure that the flow of the code is clear and that, when printing the file, it is well formed when using a reasonable font. |
| A reasonable length would be around 80 characters.</p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_wrapping_lines"><a class="anchor" href="#_wrapping_lines"></a>Wrapping lines</h4> |
| <div class="paragraph"> |
| <p>When an expression will not fit on a single line, break it according to these general principles:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>break after a comma;</p> |
| </li> |
| <li> |
| <p>break before an operator;</p> |
| </li> |
| <li> |
| <p>prefer higher level breaks to lower level breaks;</p> |
| </li> |
| <li> |
| <p>align the new line with the beginning of the expression after the assignment;</p> |
| </li> |
| <li> |
| <p>if the above rules lead to confusing code or to code that’s squished up against the right margin, please use common sense.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>Some examples breaking an arithmetic expression. |
| The first is preferred, since the break occurs outside the parenthesised expression:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> longName1 = longName2 * (longName3 + longName4 - longName5) |
| + 4; // preferred |
| longName1 = longName2 * (longName3 + longName4 |
| - longName5) + 4;</code></pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_comment"><a class="anchor" href="#_comment"></a>Comment</h3> |
| <div class="sect3"> |
| <h4 id="_comment_styles"><a class="anchor" href="#_comment_styles"></a>Comment styles</h4> |
| <div class="paragraph"> |
| <p>The Java language supports three different kinds of comments:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> // text</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The compiler ignores everything from // to the end of the line. |
| Use this style when adding a description or some kind of explanation at the same line of code.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> /* text */</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The compiler ignores everything from /* to */. |
| The next documentation style is preferred.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> /** Documentation. */</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>This indicates a documentation comment (doc comment, for short). |
| The compiler ignores this kind of comment, just like it ignores comments that use /* and */. |
| The JDK JavaDoc tool uses doc comments when preparing automatically generated documentation (See: JavaDoc keywords and HTML tags). |
| But JavaDoc only uses this documentation when it occurs at an expected position in the file like the class definition or a member declaration.</p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_block_comments"><a class="anchor" href="#_block_comments"></a>Block comments</h4> |
| <div class="paragraph"> |
| <p>Block comments are used to provide English descriptions of the contents of files, the task of methods and the description of data structures and algorithms. |
| Block comments should be used at the beginning of each file and before each method. |
| They can also be used in other places, such as within methods.</p> |
| </div> |
| <div class="paragraph"> |
| <p>For a description of class comment see 2.1.3.3 Class and Interface Declarations. |
| A method block comment looks as follows:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> /** |
| * Position the splitter location at a specified position. |
| * This method can for instance be used when the last position |
| * is stored as a preference setting for the user. |
| * |
| * @param position New position of divider, defined in pixels |
| * from the left of the containing window |
| * @see com.sun.java.swing.JSplitPane |
| * @exception org.apache.felix.player.PositionException |
| * Whenever an invalid position is passed. |
| */ |
| public void setSplitterLocation(int position) throws PositionException</code></pre> |
| </div> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_javadoc_keywords_and_html_tags"><a class="anchor" href="#_javadoc_keywords_and_html_tags"></a>JavaDoc keywords and HTML tags</h4> |
| <div class="paragraph"> |
| <p>For class headers, method headers and member variables JavaDoc is used in order to generate API documentation from the source later on (See: JavaDoc homepage - Sun Microsystems, Inc.). |
| A few specific JavaDoc keywords are:</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <colgroup> |
| <col style="width: 50%;"> |
| <col style="width: 50%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Keyword</th> |
| <th class="tableblock halign-left valign-top">Short description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">@version</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Can be used to label a specific version of a package or application so the documentation shows this version number also.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">@author</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">The name entered here is shown as the author.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">@param</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Used to define one parameter and describe this parameter.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">@see</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">When there are similarities with another class this tag is used to offer the reader a hyperlink to the mentioned class.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">@exception or @throws</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Offered as hyperlink to the exception that can be thrown by a method.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">@return</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Return value of a method</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>Some HTML-tags that can be used in order to make the comment blocks more readable:</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <colgroup> |
| <col style="width: 50%;"> |
| <col style="width: 50%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Tag</th> |
| <th class="tableblock halign-left valign-top">Short description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><p></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">New paragraph.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><br></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Break, a carriage return. |
| For separation of two paragraphs, usage of <p> is preferred.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><ul><li></li></ul></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Unordered list of items; |
| each item should start with a <li> tag. |
| By most browsers, this is formatted as a bulleted list.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">``</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Code samples; |
| use this when refering to class names, method names, parameter names, etc.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><pre></pre></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Preformatted text. |
| Use these tags to protect figures and schemas "drawn" in Ascii, against formatting by the browser (which normally ignores whitespace and line breaks)</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><dl><dt></dt><dd></dd></dl></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Definition lists; |
| <dt> specifies the term that is defined and <dd> the definition of this term. |
| Not frequently used.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-note" title="Note"></i> |
| </td> |
| <td class="content"> |
| there is no need to embed the parameter name in the @param tag in ` tags; |
| this is done by javadoc automatically. |
| The same holds for the exception name in the @exception or @throws tag. |
| In the clarifying text however, use the ` |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>Example:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> /** |
| * Prints a range from an object array. The range |
| * is specified by the first element to print, and |
| * ranges to the last element of the array. |
| * |
| * @param array contains the objects to print |
| * @param first index of first element in |
| * the <code>array</code> to print |
| */ |
| public void printRange(Object[] array, int first)</code></pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_java_syntax_and_its_layout"><a class="anchor" href="#_java_syntax_and_its_layout"></a>Java syntax and its layout</h2> |
| <div class="sectionbody"> |
| <div class="sect2"> |
| <h3 id="_declarations"><a class="anchor" href="#_declarations"></a>Declarations</h3> |
| <div class="paragraph"> |
| <p>When declaring a variable or method make the accessibility as restrictive as possible. |
| When using multiple keywords use the following ordering of keywords:</p> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic"> |
| <li> |
| <p>accessibility Start with the accessibility as it makes clear if the method or variable is reachable at all.</p> |
| </li> |
| <li> |
| <p>static (if applicable)</p> |
| </li> |
| <li> |
| <p>final (if applicable)</p> |
| </li> |
| <li> |
| <p>return type (methods only) or type (for variables) The type is for readability as close as possible to the name.</p> |
| </li> |
| </ol> |
| </div> |
| <div class="paragraph"> |
| <p>This order is also compatible with the order that is used in Java for the main() method. |
| This results in following sequence:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> // A familiar one: |
| public static void main(String[] args) {} |
| private static String m_lastCreated = null; |
| private static final int RED = 4711;</code></pre> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_number_per_line"><a class="anchor" href="#_number_per_line"></a>Number per line</h4> |
| <div class="paragraph"> |
| <p>One declaration per line is recommended since it encourages commenting and it does not lead to confusing code. |
| It also is more clear about the explicit initialization of variables as discussed in Initialization.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Example:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> int level = 0; // level where user enters the system |
| int horizontalSize = 0; // horizontal size of current level layer</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>is preferred over:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> int level, horizontalSize; // level and size of current level layer</code></pre> |
| </div> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_placement"><a class="anchor" href="#_placement"></a>Placement</h4> |
| <div class="paragraph"> |
| <p>In a method, declare local variables just before they are needed. |
| This overcomes the problem of a big list of parameters at the beginning of a method and the use of a variable becomes more clearly in the context of the code, .e.g. |
| its initialization.</p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_initialization"><a class="anchor" href="#_initialization"></a>Initialization</h4> |
| <div class="paragraph"> |
| <p>The initialization of class variables is strictly not necessary because of the default initialization that takes place for these kinds of members. |
| For some types, e.g. |
| Booleans, this requires detailed knowledge of all the default values so it is more clear and explicit to initialize each member. |
| Variables that are used and declared within methods must always be initialized explicitly (the compiler will generate an error when you forget this).</p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_class_and_interface_declarations_2"><a class="anchor" href="#_class_and_interface_declarations_2"></a>Class and Interface Declarations</h4> |
| <div class="paragraph"> |
| <p>When coding Java classes and interfaces, the following formatting rules should be followed:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>no space between a method and its parameter list</p> |
| </li> |
| <li> |
| <p>"{" is on a line by itself indented to match its corresponding opening statetment, except when it is a null statement, in which case the "{" should appear on the same line as the opening statement</p> |
| </li> |
| <li> |
| <p>"}" starts a line by itself indented to match its corresponding opening statement, except when it is a null statement, in which the case the "}" should appear immediately after the "{".</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>Example:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">class ShipmoTrial extends Trial |
| { |
| int m_index = 0; |
| |
| ShipmoTrial(int index) |
| { |
| m_index = index; |
| } |
| |
| void emptyMethod() {} |
| }</code></pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_statements"><a class="anchor" href="#_statements"></a>Statements</h3> |
| <div class="sect3"> |
| <h4 id="_simple_statements"><a class="anchor" href="#_simple_statements"></a>Simple statements</h4> |
| <div class="paragraph"> |
| <p>Each line should contain at most one statement.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Example:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> // Do not use this |
| argv++; argc++;</code></pre> |
| </div> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_compound_statements"><a class="anchor" href="#_compound_statements"></a>Compound statements</h4> |
| <div class="paragraph"> |
| <p>Compound statements are statements that contain lists of statements enclosed in braces ("{…​}"):</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>The enclosed statements should be indented one more level than the compound statement.</p> |
| </li> |
| <li> |
| <p>The opening brace should be at the end of the line that begins the compound statement; |
| the closing brace should begin a line and be indented to the beginning of the compound statement.</p> |
| </li> |
| <li> |
| <p>Braces are used around all statements, even single statements, when they are part of a control structure, such as a if-else or for statement. |
| This makes it easier to add statements without accidentally introducing bugs due to forgetting to add braces.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_if_if_else_if_else_if_else_statements"><a class="anchor" href="#_if_if_else_if_else_if_else_statements"></a>if, if-else, if else-if else statements</h4> |
| <div class="paragraph"> |
| <p>There are a lot of nested possibilities for if-else constructions. |
| All these variations can be programmed in very cryptic ways that easily and often will lead to buggy code. |
| By being more explicit in the used coding style a lot of confusion can be taken away.</p> |
| </div> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-note" title="Note"></i> |
| </td> |
| <td class="content"> |
| When using only one statement in a compound block brackets are optional. |
| It can be a good practice to use always brackets because mistakes can be made easily when adding a second statement and brackets are forgotten. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>The following example illustrates the correct use of brackets in a few different if-then-else constructions:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">if (condition) |
| { |
| statement1; |
| statement2; |
| } |
| else |
| { |
| statement3; |
| } |
| |
| if (condition) |
| { |
| statement1; |
| statement2; |
| } |
| else if (condition1) |
| { |
| statement3; |
| statement4; |
| } |
| else |
| { |
| statement5; |
| statement6; |
| }</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Note that in the example the else if construction is started at a new line so the statement can not be overlooked.</p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_switch"><a class="anchor" href="#_switch"></a>switch</h4> |
| <div class="paragraph"> |
| <p>When using a switch statement use following guidelines:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Every switch statement should include a default case. |
| The break in the default case is redundant, but it prevents a fall-through error if later another case is added.</p> |
| </li> |
| <li> |
| <p>The so-called fall-through construction should be avoided. |
| Only when there are good reasons to use it, make sure that it is very clear that a fall-through is used (comment it).</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>The next example shows the sample code that uses the guidelines for a switch statement:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> switch (condition) |
| { |
| case A: |
| statements; |
| // falls through here!! |
| case B: |
| statements; |
| break; |
| default: |
| statements; |
| break; |
| }</code></pre> |
| </div> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_try_catch"><a class="anchor" href="#_try_catch"></a>try - catch</h4> |
| <div class="paragraph"> |
| <p>A try - catch statement should have the following format:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> try |
| { |
| statements; |
| } |
| catch (ExceptionClass ex) |
| { |
| statements; |
| }</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>When using finally to add code that always will be executed this will look like:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> try |
| { |
| statements; |
| } |
| catch (ExceptionClass ex) |
| { |
| statements; |
| } |
| finally |
| { |
| statements; |
| }</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Note that the catch and the finally start at a new line in order to be compliant to the guidelines for if-then-else statements.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_white_space"><a class="anchor" href="#_white_space"></a>White Space</h3> |
| <div class="sect3"> |
| <h4 id="_blank_lines"><a class="anchor" href="#_blank_lines"></a>Blank lines</h4> |
| <div class="paragraph"> |
| <p>Blank lines improve readability by setting of sections of code that are logically related.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Two blank lines should always be used in the following circumstances:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>between class and interface definitions;</p> |
| </li> |
| <li> |
| <p>between a group of methods that belong together (by its functionality or because they are part of the same interface).</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>One blank line should always be used in the following circumstances:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>between methods;</p> |
| </li> |
| <li> |
| <p>before a block or single line comment;</p> |
| </li> |
| <li> |
| <p>between logical sections inside a method to improve readability.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_blank_spaces"><a class="anchor" href="#_blank_spaces"></a>Blank spaces</h4> |
| <div class="paragraph"> |
| <p>Blank spaces should be used in the following circumstances:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>A keyword followed by a parenthesis should be separated by a space.</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">while (ready == false) { ... |
| }</code></pre> |
| </div> |
| </div> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>Note that blanks should not be used between a method call and its opening parenthesis. |
| This helps to distinguish keywords from function calls.</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Blanks should appear after commas in argument lists.</p> |
| </li> |
| <li> |
| <p>All binary operators except "." should be separated from their operands by spaces. |
| Blanks should never separate unary operators such as unary minus, increment("++") and decrement("--") from their operands.</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">a += c + d; |
| a = (a + b) / (c * d); |
| xCoord{pp};</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>The expressions in a for statement should be separated by blanks.</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">for (expr1; cond1; expr2)</code></pre> |
| </div> |
| </div> |
| </li> |
| <li> |
| <p>Casts should be followed by a blank.</p> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">myInstance.doIt((TreeFrame) frame);</code></pre> |
| </div> |
| </div> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_naming_conventions"><a class="anchor" href="#_naming_conventions"></a>Naming conventions</h3> |
| <div class="paragraph"> |
| <p>Naming conventions make programs more understandable by making them easier to read. |
| They can also give information about the function of the identifier.</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <colgroup> |
| <col style="width: 33.3333%;"> |
| <col style="width: 33.3333%;"> |
| <col style="width: 33.3334%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Identifier Type</th> |
| <th class="tableblock halign-left valign-top">Rules for Naming</th> |
| <th class="tableblock halign-left valign-top">Examples</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Interfaces</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Interface names should be capitalized like class names.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">interface Enumeration;</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Methods</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Methods should be verbs in mixed case with the first letter lowercase. |
| Within each method name capital letters separate words. |
| Property methods or get-set methods are used as follows:</p></td> |
| <td class="tableblock halign-left valign-top"></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Constant (static final) variables</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Names should be all uppercase with words separated by underscores ("_").</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">public static final int BLACK = 99;</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Exceptions</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Like class names; |
| always ending in "Exception"</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">InputException</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Packages</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Lowercase only; |
| avoid lengthy package names; |
| always start with org.apache.felix.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">org.apache.felix.demo.bundle</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-note" title="Note"></i> |
| </td> |
| <td class="content"> |
| All Java identifiers are case sensitive. |
| </td> |
| </tr> |
| </table> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_references"><a class="anchor" href="#_references"></a>References</h2> |
| <div class="sectionbody"> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Java Code Conventions - Sun Microsystems, Inc. |
| No ref. |
| number, only hyperlink: <a href="http://java.sun.com/docs/codeconv/" class="bare">http://java.sun.com/docs/codeconv/</a></p> |
| </li> |
| <li> |
| <p>How to Write Doc Comments for JavaDoc - Sun Microsystems, Inc. |
| <a href="http://java.sun.com/products/jdk/javadoc/writingdoccomments.html" class="bare">http://java.sun.com/products/jdk/javadoc/writingdoccomments.html</a></p> |
| </li> |
| <li> |
| <p>JavaDoc homepage - Sun Microsystems, Inc. |
| <a href="http://java.sun.com/products/jdk/javadoc/" class="bare">http://java.sun.com/products/jdk/javadoc/</a></p> |
| </li> |
| <li> |
| <p><a href="https://issues.apache.org/jira/secure/attachment/12419890/Apache+Felix+Eclipse+Template.xml">Eclipse formatting template</a>.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </article> |
| <aside class="toc sidebar" data-title="Contents" data-levels="2"> |
| <div class="toc-menu"></div> |
| </aside> |
| </div> |
| </main> |
| </div> |
| <footer class="footer"> |
| <p>Content licensed under AL2. UI licensed under MPL-2.0 with extensions licensed under AL2</p> |
| </footer> |
| <script src="../../_/js/site.js"></script> |
| <script async src="../../_/js/vendor/highlight.js"></script> |
| </body> |
| </html> |