(http://c2.com/ppr/wiki/JavaIdioms/html.zip -- fast download of all these pages.) ---- '''Java 5 Idioms''' The word 'Idiom', in this context, should be taken to mean something like 'Common Practice'. This page isn't an appropriate place to put patterns, it's a place to put example of common solutions to java coding problems. If the Idiom linked to off this page has no code, then its a pattern. If its about using a related group of classes to solve a design problem, then it is a pattern too. * VarargsCollectionFactoryMethod * AnnotationsOverTagInterfaces * AnnotationsOverNamingConventions * NamingConventionsOverAnnotations * BoundedWildcardsIncreaseApplicability * NameStaticMethodsForStaticImport * ProxiedInterfacesConfiguredWithAnnotations * ''Are there any other idioms for using generics and other language features introduced in Java 5?'' '''Architectural idioms:''' * JavaNamingConventions * ParameterClasses -- parameterise the behaviour of a Java program based on external data * InterfacesIndependentOfImplementation * AppletsAreApplicationsToo -- ensure an applet can run stand-alone, too * PackagePerLayer -- structuring m-tier applications * FallBackOnReflection '''Memory management and reference/value semantics:''' * ResourceReleasesResource, which came from ReleasingResourcesInJava * ReturnNewObjectsFromAccessorMethods -- Avoid aliasing object state by returning copies of state data from accessors * ImmutableValue * ValueObjectsShouldBeImmutable * ReturnImmutablesFromAccessorMethods * CopyMutableParameters * ImmutableCollection -- concurrently walk over and modify a collection * ImmutableInterface * EviscerateParameters * CrossSection * ThrowawayObject * PassParameterInArray * PassParameterInWrapperObject * NoNullBeyondMethodScope * JavaImmutableStruct -- ''but also see DumbDataObject for a second opinion. -- JeffBay'' '''Object creation and initialization idioms''' * TestWhetherInConstructionPhase * EncapsulateMultiStageConstruction * UseFactoriesToBuildObjects * HelperMethodForInitializations * ParameterFileNotHtmlParams * ParameterClasses * ComplexInterfacesNeedCloneable -- implement clone() when dealing with non-trivial interfaces * AlwaysDeclareSerialVersionUid * ImmutableValue * ArgumentAccumulator * DoubleBraceInitialization * VarargsCollectionFactoryMethod ''[Java 5]'' '''Enumeration and collection idioms:''' * ReturnEnumerationsNotCollections * UseEnumerationsInsteadOfForLoops * UseClosuresNotEnumerations * ImmutableCollection * DuplicateCollectionsForModificationSafety * BlocksInJava * FlyweightEnum * EnumeratedTypesInJava * TheLclass '''How to use interfaces:''' * BuildInterfaceImplementationPairs * MaskingInterfaces * InterfacesIndependentOfImplementation * ComplexInterfacesNeedCloneable -- implement clone() when dealing with non-trivial interfaces * InterfacesForDefiningConstants * UseClosuresNotEnumerations * ImmutableInterface -- emulate the C++ const keyword in Java * TagInterface -- empty interface to tag a class * AdaptDontImplement -- use of the Adaptor pattern instead of implementing interfaces * FallBackOnReflection * InterfacesForJavadoc '''Exception idioms:''' * DontThrowGenericExceptions * ConvertExceptions ** HomogenizeExceptions *** RefineExceptions * RefactorExceptionHandlers * ThrowDontCatch * UnhandledException * BouncerPattern * ExceptionTunneling * NestedException * GeneralizeOnExceptionBehavior * DeclareThrowsExceptionByDefault * EmptyCatchClause (an AntiIdiom) * perhaps UseFinallyInsteadOfCatch will come from JavaExceptionsAreParticularlyEvil '''Concurrency idioms''' * ImmutableCollection * ImmutableValue * ImmutableInterface * ValueObjectsShouldBeImmutable * PrivateMutex * MaskInterrupts '''Type-safety idioms''' * EnumeratedTypesInJava * AvoidFinalStringsForUniqueTypes * MaskingInterfaces * BuildInterfaceImplementationPairs * RangedInt -- Range-limited integer in Java '''Performance''' * CatchDontCheck (Rather an Antipattern as described on CatchDontCheckRefuted) * CheckDontCatch * BetterForLoopConstruct * FallBackOnReflection '''Documentation and commenting''' * FixmeComment -- on the usage of comments for marking code that needs attention '''InnerClass''''''es''' * InnerClassesAreSecondaryAbstractions * NoPublicInnerClasses * InnerClassInInterface -- or NestedClassInInterface '''Networking, Remote Objects & Remote Method Invokation''' * ObserversAndRmi * RmiPatterns '''General workarounds, idioms, references and miscellanea:''' * BeansNotObserverObservable * ConditionalCompilationInJava * EfficientContractsInJava * ReturnBooleanEvaluations * UseObjectsToReturnMultipleValues * ClosuresThatWorkAroundFinalLimitation * LimitConstructorArguments * AbstractStaticVariables * CreatePrivatelyPublishLater * BankOfEngland * JavaPackageNames -- how to name a package * BlocksInJava -- HigherOrderFunction''''''s and FunctorObject''''''s in Java * ObserverObservable (a pattern implementation, not an idiom) * IdiomOrPattern -- what's an idiom * JavaPatterns * ServletAndJspPatterns '''AntiPattern''''''s & AntiIdiom''''''s:''' * EmptyCatchClause * DoubleCheckedLockingIsBroken * DontCreateGarbage '''Related Work:''' * ''Java in Practice: Design Styles and Idioms for Effective Java'', ISBN: 0201360659 * ''EssentialJavaStyle: Patterns for Implementation'', ISBN: 0130850861 * ''EffectiveJava: Programming Language Guide'', ISBN: 0201310058 * ''Patterns in Java, Volume 1'', ISBN: 0471258393. http://www.mindspring.com/~mgrand/pattern_synopses.htm * ''Patterns in Java, Volume 2'', ISBN: 0471258415. http://www.mindspring.com/~mgrand/pattern_synopses2.htm * ''Patterns in Java, Volume 3'', ISBN: 0471333158. http://www.mindspring.com/~mgrand/pattern_synopses3.htm : Caveat: read the reviews on Amazon to check that the above two books are aimed at your level of experience. Also, you can find several of the patterns in these books, and the upcoming volume 3, on this page and elsewhere on the WikiWikiWeb. ''Volume 3 is out and claims to cover J2EE design patterns.'' * ''Concurrency : State Models & Java Programs'', ISBN: 0471987107 : This book has a chapter on architectural styles for concurrent programs. * ''Concurrent Programming in Java: Design Principles and Patterns'', ISBN: 0201695812 : The second edition of this book, which radically altered the chapter structure, is ISBN: 0201310090. * ''Refactoring : Improving the Design of Existing Code'', ISBN: 0201485672 : Strictly more about good coding than idioms but very relevant. ---- Related links: * http://www.angelikalanger.com/Articles/EffectiveJava.html * http://www.javapractices.com/ (see also other JavaLinks) ---- Please add any that you think of, and feel free to refactor the groupings. IdiomOrPattern? ---- CategoryIndex CategoryJava CategoryIdiom