Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #8255

Re: borrowing Constants

From Lew <lewbloch@gmail.com>
Newsgroups comp.lang.java.programmer
Subject Re: borrowing Constants
Date 2011-09-23 19:19 -0700
Organization http://groups.google.com
Message-ID <31541207.2456.1316830765528.JavaMail.geo-discussion-forums@prfh23> (permalink)
References <cf9q77h3gnhunlqpckpsobog4oqvlhiga7@4ax.com> <j5jcmu$hqq$1@dont-email.me>

Show all headers | View raw


markspace wrote:
> Roedy Green wrote:
>> When you use Class B, does all of class A get instantiated?
>> Does all of class A get put in B's jar?
> 
> I think so, yes.  Not "instantiated" as others pointed out but 
> initialized. But yes, regardless.
> 
> I believe you can get around this by making VERSION final.  The compiler 
> is allowed (possibly required?) to copy final static values as a kind of 
> constant, in order to avoid this kind of unneeded initialization.
> 
> class A
> {
>   static final String VERSION = "1.0b";
> }

You are correct.  That has an interesting side effect on builds.  Clients of class 'A', above:

  class B
  {
    static final String FOO_VERSION = "Foo-" + A.VERSION;
  }

can use the compile-time constant (there are rules for that) to build its own compile-time constant.

But B's view of 'A.VERSION' doesn't necessarily change when 'A' changes it.  Constants are baked into the class file, so until 'B' recompiles, it will load the old version of 'A.VERSION' at runtime.  Other classes in the application might see the change at different builds, depending on when they were last recompiled and which copies of which ".class" files were in the way when they compiled.

One can be surprised by this behavior.  Cargo cults preach "rebuild the world" as the only true preventative.  For any reasonably-organized project it's good advice.

-- 
Lew

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

borrowing Constants Roedy Green <see_website@mindprod.com.invalid> - 2011-09-23 17:40 -0700
  Re: borrowing Constants Arne Vajhøj <arne@vajhoej.dk> - 2011-09-23 20:44 -0400
    Re: borrowing Constants Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2011-09-23 22:10 -0300
      Re: borrowing Constants Roedy Green <see_website@mindprod.com.invalid> - 2011-09-23 18:39 -0700
        Re: borrowing Constants Arne Vajhøj <arne@vajhoej.dk> - 2011-09-23 22:17 -0400
        Re: borrowing Constants Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2011-09-25 11:25 -0700
          Re: borrowing Constants Lew <lewbloch@gmail.com> - 2011-09-25 11:36 -0700
      Re: borrowing Constants Arne Vajhøj <arne@vajhoej.dk> - 2011-09-23 22:30 -0400
  Re: borrowing Constants Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-09-23 21:15 -0400
    Re: borrowing Constants Roedy Green <see_website@mindprod.com.invalid> - 2011-09-23 18:43 -0700
  Re: borrowing Constants markspace <-@.> - 2011-09-23 18:44 -0700
    Re: borrowing Constants Lew <lewbloch@gmail.com> - 2011-09-23 19:19 -0700
    Re: borrowing Constants Arne Vajhøj <arne@vajhoej.dk> - 2011-09-23 22:32 -0400
  Re: borrowing Constants Lew <lewbloch@gmail.com> - 2011-09-23 19:11 -0700
    Re: borrowing Constants Lew <lewbloch@gmail.com> - 2011-09-23 19:26 -0700
  Re: borrowing Constants v_borchert@despammed.com (Volker Borchert) - 2011-09-24 09:44 +0000
  Re: borrowing Constants Roedy Green <see_website@mindprod.com.invalid> - 2011-09-24 15:38 -0700
  Re: borrowing Constants Roedy Green <see_website@mindprod.com.invalid> - 2011-09-24 17:09 -0700
    Re: borrowing Constants Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-09-24 20:14 -0400
    Re: borrowing Constants markspace <-@.> - 2011-09-24 18:18 -0700
      Re: borrowing Constants Arne Vajhøj <arne@vajhoej.dk> - 2011-09-25 22:36 -0400
    Re: borrowing Constants Arne Vajhøj <arne@vajhoej.dk> - 2011-09-25 22:35 -0400
  Re: borrowing Constants Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2011-09-26 01:22 +0200

csiph-web