static initializer not working

M

mike

Hi,


I cannot get my registration of parser to work. When try to make a
call to get the registered parser:

PullParserFactory.instance().createParser(type);

I get a NullPointerException. When I debug I can see that the HashMap
is empty.

What am I missing?

br,

//mike

public class FindBugsParser implements AbstractPullParser{

// Register with Factory
static {
PullParserFactory.instance().registerParser(PluginImpl.FINDBUGS,
new FindBugsParser());
}

public AbstractPullParser createParser() {
return new FindBugsParser();
}

}

public final class PullParserFactory {

/**
* Single instance created upon class loading.
*/
private static PullParserFactory INSTANCE = new PullParserFactory();

private static final HashMap<String, AbstractPullParser>
registeredParsers = new HashMap<String, AbstractPullParser>();

//no outside access.
private PullParserFactory() {

}

public static PullParserFactory instance() {
return INSTANCE;
}

public void registerParser(String type, AbstractPullParser parser) {
registeredParsers.put(type, parser);
}

public AbstractPullParser createParser(String type) {

return (AbstractPullParser) registeredParsers.get(type);
}

}
 
E

Eric Sosman

Hi,


I cannot get my registration of parser to work. When try to make a
call to get the registered parser:

PullParserFactory.instance().createParser(type);

I get a NullPointerException. When I debug I can see that the HashMap
is empty.

What am I missing?

My hunch is that nothing has caused the FindBugsParser class to
be initialized at the time you make your call and get the NPE:

- The HashMap is initially empty, and gets populated by calls
to registerParser().

- The only (visible) call to registerParser() occurs during the
initialization of FindBugsParser.

- So if FindBugsParser has not yet been initialized at the time
of the call to instance(), the HashMap will still be empty and
instance() will return null.

The fact that FindBugsParser.class is hanging around somewhere in
your class path is not enough to make Java load and initialize it;
Java won't load the class until it sees a need for it.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top