This is the mail archive of the kawa@sources.redhat.com mailing list for the Kawa project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: A comment on Java style


Per Bothner wrote:
Jim White wrote:

Works if a static is needed too:

final static String CLASSNAME = MyClass.class.getName();
The advantage is that the javac compiler fill in the package
name, and gives you an error if it can't find the class.

The disadvantage is that the generated bytecode is (essentially):
  Class.forName("MyClass").getName()
This is slower, and takes up more space in the bytecode.
Furthermore, it causes MyClass to be initialized.
Well, actually the MyClass.class generates a getstatic, and naturally the getName requires invokevirtual. Certainly more overhead than the loadconstant for the literal string. That (if the execution time was an issue) is why I pointed out that this can be used in a static initializer (although chances are a final variable around the inner loop would be just as good).

But as you say, referring to a class this way means that it must be loaded and initialized (which in the case of the static is when that would happen anyhow if it were within the same class).

So only the case where I needed to play with a class's name but not cause it to be initialized (a rarity for any ordinary application, but certainly can arise in language implementation level stuff) would I have to avoid this construct (and wouldn't be expecting any help from a refactoring tool or other reflective process anyhow).

jim


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]