Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Gave ID to OBJ33-J rule

...

Conversely, a source of error is assuming that the same codebase will result in the same class in a JVM. While it is usually true in common user applications, it is not the case with J2EE servers like servlet containers, which could use different instances of classloaders to be able to deploy and undeploy applications at runtime without restarting the JVM. In this situation, 2 objects whose classes come from the same codebase could be different classes to the JVM and it could be confusing to get false from the equals() method on their respective classes.

Non-Compliant Solution

In this non-compliant solution, the code compares the name of the class of object h to the string "DefaultAuthenticationHandler", and proceeds according to whether this comparison succeeds or not.

...

The problem with this solution is that another class could exist with the same name in the same JVM.

Compliant Solution

In this compliant solution, we compare the class object of h itself to the class object of the class that the current class loader would load with our required name.

...

The call to loadClass() returns the class having the specified name in the current namespace (of the classloader), and the comparison is correctly performed on two class objects.

Non-Compliant Solution

This code compares the names of the 2 classes of objects x and y and behaves accordingly.

...

It should compare the two class objects instead.

Compliant Solution

This compliant solution correctly compares the 2 objects' classes

...

The class objects will only be equal when they have the same class as defined in JVMSpec 99 and repeated above.

References

  1. Wiki Markup
    \[[JVMSpec 99|AA. Java References#JVMSpec 99]\] [§2.8.1 Class Names|http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html]
  2. Wiki Markup
    \[[Christudas 05|AA. Java References#Christudas 05]\]
  3. Wiki Markup
    \[[Mcgraw 98|AA. Java References#Mcgraw 98]\]
  4. Wiki Markup
    \[[Wheeler 03|AA. Java References#Wheeler 03]\] [Java|http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/java.html]