diff --git a/src/site/xdoc/article2_5.xml b/src/site/xdoc/article2_5.xml new file mode 100644 index 000000000..8921ca508 --- /dev/null +++ b/src/site/xdoc/article2_5.xml @@ -0,0 +1,135 @@ + + + + + What's new in Commons Lang 2.5? + Commons Documentation Team + + + +
+

Commons Lang 2.5 is out, and the obvious question is: "So what? What's changed?".

+

This article aims to briefly cover the changes and save you from having to dig through each JIRA +issue to see what went on in the two years of development between Lang 2.4 and 2.5.

+

Two years?!? Yes, it's true. The reason is that 2.5 represents the backwards compatible changes in the +nearly complete Java-5 focused Lang 3.0.

+
+

There were no new deprecations in 2.5.

+
+
+

2.5 was built using Sun's 1.6.0_17 JVM, but targets Java 1.3.

+
+
+

A new org.apache.commons.lang.reflect package was added, accumulating common high-level uses of the java.lang.reflect APIs. The +classes, hopefully self-evident in nature, were pulled together from the existing BeanUtils and the unreleased Reflect components. +The classes are:

+
    +
  • ConstructorUtils - primarily creating new instances of classes
  • +
  • FieldUtils - primarily reading and writing to Object/Class fields
  • +
  • MethodUtils - primarily methods to make invoking methods simpler
  • +
+

You can read more about the classes in their +javadoc.

+
+
+

With both Java 7 and Windows 7 becoming a reality, +SystemUtils was updated to +provide boolean fields for both versions.

+
+
+

There were 66 new methods added to existing Commons Lang classes.

+

The ArrayUtils class +received two new types of methods. Firstly, a boolean isNotEmpty(array) set of methods, identifying whether the particular +array is null or an empty sized array. This makes it the inverse of the existing isEmpty(array) methods. Secondly, an array +nullToEmpty(array) set of methods that converts null or empty arrays to a singleton empty array already available from the +ArrayUtils class. Non null/empty arrays are left untouched.

+ +

The constructor for the +CharRange class is somewhat +confusing. It takes a boolean parameter that when set to true means the CharRange is negated. To make code easier to read, the +following static helper methods were added:

+
    +
  • public org.apache.commons.lang.CharRange is(char)
  • +
  • public org.apache.commons.lang.CharRange isIn(char, char)
  • +
  • public org.apache.commons.lang.CharRange isNot(char)
  • +
  • public org.apache.commons.lang.CharRange isNotIn(char, char)
  • +
+

An iterator() method was also added to provide another way of walking the range.

+ +

The EqualsBuilder +obtained a new reset() method to allow for reuse, while the +HashCodeBuilder +received a hashCode() method that returns the built hash code instead of the natural hash code of the builder object itself. It +doesn't really matter what the builder chooses to use as a hash code and this stops accidental use of the hashCode() instead of +toHashCode() method from causing lots of pain.

+ +

Helper isFalse(), isTrue() and toBoolean() methods were added to +MutableBoolean, +while the other mutable classes received String argument constructors.

+ +

Lastly, the DateUtils +class received a new ceiling set of methods to truncate upwards, and a parseDateStrictly method to parse a Date with the +supplied DateFormat classes leniency set to false.

+ +
+ +
+

As with 2.4, the +StringUtils class has +grown and we cover its new methods in its own section.

+
    +
  • abbreviateMiddle(String, String, int);String - This method turns aRatherLongNameSuchAsAFileName into 'aRatherLo...AFileName'. +This is often desirable when you want to restrict the length of a name, but you can afford to have quite long names.
  • +
  • indexOfIgnoreCase(String, String);int - An indexOf method that ignores the case of what it's matching. Matching lastIndexOfIgnoreCase and 'start at index' variants were also added.
  • +
  • lastOrdinalIndexOf(String, String, int);int - A matching variant for the already exisitng ordinalIndexOf method - they +support finding the Nth indexOf instead of the first time the search term is found.
  • +
  • isAllLowerCase(String);boolean - Is the String all lower case.
  • +
  • isAllUpperCase(String);boolean - Is the String all upper case.
  • +
  • lowerCase(String, Locale);String - Null protected toLowerCase methods for the platform independent inclined.
  • +
  • upperCase(String, Locale);String - Null protected toUpperCase methods for the platform independent inclined.
  • +
  • repeat(String, String, int);String - Repeat option that includes an optional separator.
  • +
  • startsWithAny(String, String[]);boolean - Does the specified String start with any of the supplied values.
  • +
+
+ +
+

Per the release notes there are 32 bugs fixed in Lang 2.5. Some highlights are:

+
    +
  • LANG-477 - fixing an OutOfMemoryError in ExtendedMessageFormat.
  • +
  • LANG-76 - EnumUtils.getEnum() doesn't work well in 1.5.
  • +
  • LANG-204 and +LANG-506 - Multithread improvements to the package private Entities +class, used behind the scenes by StringEscapeUtils.
  • +
  • LANG-511 - Improve performance by deferring LocalUtils initialization.
  • +
  • LANG-523 - Two orders of magnitude performance improvement in StrBuilder.
  • +
  • LANG-467 - Reverted the change to EqualsBuilder in Lang 2.4 to +specially handle BigDecimal. While useful, it put things out of sync with HashCodeBuilder.
  • +
  • LANG-586 - Use of a ThreadLocal in HashCodeBuilder and +ToStringStyle meant that containers could end up with memory leaks. This was rewritten to avoid this.
  • +
  • LANG-472 - RandomUtils.nextLong() was returning only even numbers. Fans of Java-based roulette wheels can breathe a sigh of relief.
  • +
+
+ +
+

Hopefully that was all of interest. Don't forget to download Lang 2.5, or, for the Maven repository users, upgrade your <version> tag to 2.5. Please feel free to raise any questions you might have on the mailing lists, and report bugs or enhancements in the issue tracker.

+
+ +
+ + +