Monday, November 26, 2007

Do you like static imports?

Static imports have been around since Java 1.5, but they are a feature that I have rarely used, or even seen much in code. I guess that's because static imports is not a must have thing, but something that is nice to have. Using static imports takes some pain away from typing code.

For example, instead of writing

System.out.println("some message");

we could statically import System.out and write it as follows:











static import System.out;
public class HelloWorld {
  public static void main(String args[]) {
    out.println("Hello World");
  }
}



Well using static imports definetely takes the pain away from typing System.out every time. However sometimes using static imports can also reduce the readability of code, because we would have to look at the imports to know if a variable in code was declared within that class itself or imported statically.

Having said that, one place where I would definetely use static imports is in importing enums. Since elements of an enum are always public static final, it makes some sense to statically import all the enum elements so that we do not have to qualify them while using them.










public enum Grade {
  A,
  B,
  C;
}












package example.staticimport;
import static example.staticimport.Grade.*;
import static java.lang.System.out;

public class GradePrinter {
 public static void main(String args[]) {
       Grade g = getGrade();
       switch(g) {
         case A:
             out.println("Excellent");
     case B:
             out.println("Very Good");
         case C:
             out.println("You Can Do Better");
      }
   }

/   private static Grade getGrade() {
//return any grade
        return Grade.A;
     }
}



Resource:

  • http://java.sun.com/j2se/1.5.0/docs/guide/language/static-import.html
  • Saturday, November 17, 2007

    Spot the mistake

    Can you spot the mistake in this code?

    // BROKEN - throws NoSuchElementException!

    for (Iterator i = suits.iterator(); i.hasNext(); )
    for (Iterator j = ranks.iterator(); j.hasNext(); )
    sortedDeck.add(new Card(i.next(), j.next()));

    If not, check this article on the Java for...each loop. 



    Note: This text was originally posted on my earlier blog at http://www.adaptivelearningonline.net