Java Specialists' Java Training Europehome of the java specialists' newsletter

The Java Specialists' Newsletter
Issue 086b2004-03-20 Category: Tips and Tricks Java version:

Subscribe Free RSS Feed

Initialising Fields before Superconstructor call (Follow-up)

by Dr. Heinz M. Kabutz

Gidado-Yisa Immanuel sent me another approach that is a bit simpler to write, hence should reduce the possibility of bugs. Instead of using a static field, and worrying about concurrent access, why not rather just use a ThreadLocal? I must admit that I have never used ThreadLocals because of the problems in previous versions of Java, so that was an option I did not consider.

import javax.swing.*;

public class CustomerView4 extends FormView1 {
  private static final ThreadLocal tempType = new ThreadLocal();
  private Integer type;
  public CustomerView4(JFrame owner, int type) {
    super(hackToPieces(owner, type));
  }
  private static JFrame hackToPieces(JFrame owner, int type) {
    tempType.set(new Integer(type));
    return owner;
  }
  private void init() {
    type = (Integer) tempType.get();
  }
  public JComponent makeUI() {
    init();
    switch (type.intValue()) {
      case 0:
        return new JTextArea();
      case 1:
        return new JTextField();
      default:
        return new JComboBox();
    }
  }
  public static void main(String[] args) {
    CustomerView4 view = new CustomerView4(null, 1);
    System.out.println(view.getMainUIComponent().getClass());
  }
}

This certainly looks simpler than my approach, so rather use Gidado's solution than mine, even though mine is marginally faster (about 1%). And even better than Gidado's solution would be to change the framework :-)

Kind regards from

Heinz

Tips and Tricks Articles Related Java Course Discuss at The Java Specialist Club

Book Review
Concurrency
Exceptions
GUI
Inspirational
Language
Performance
Software Engineering
Tips and Tricks
What is the Java Specialists Club?

© 2010 Heinz Kabutz - All Rights Reserved Sitemap seo web design Catch22 Marketing
Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners. JavaSpecialists.eu is not connected to Oracle, Inc. and is not sponsored by Oracle, Inc.