Re: Idiom for forcing class loading?
On Wed, 18 Nov 2009, Peter Duniho wrote:
Tom Anderson wrote:
[...]
Am i right in thinking that all of these will force loading of Foo?
I think so. But I haven't checked the spec to make sure.
Does anyone have any other idioms? How about any opinions on which idiom is
best, or at least most idiomatic?
I find the question ironic. :) The fact is, you've got some clearly
non-idiomatic scenario, where for some reason your code has managed to become
dependent on the initialization of a class that it does not in fact refer to
in the process of being dependent on it.
Given that violation of a very fundamental assumption one normally could make
in a Java program, asking for an idiomatic solution to the violation seems
sort of silly to me. Your code is already broken; any work-around is
destined to be non-idiomatic. :)
What's really happening is more like this:
class FooMangler implements Mangler {
static {
ManglerRegistry.register("foo", FooMangler.class);
}
}
class ManglingParser extends org.xml.sax.helpers.DefaultHandler {
public void startElement (String uri, String localName, String qName, Attributes attrs) throws SAXException {
String manglerName = attrs.getValue("mangler");
Mangler mangler = ManglerRegistry.lookup(manglerName);
mangler.mangle(qName, attrs);
}
}
The idea is that manglers can take care of registering themselves - as
long as they're loaded. This is an old and fairly well-known pattern (at
least, not wildly obscure - in terms of birds, about as common as a
kingfisher is in England), although i certainly wouldn't say it's a good
one, or even a non-dubious one. 'Broken' is a bit too strong, although
only a bit.
tom
--
Osteoclasts = monsters from the DEEP -- Andrew