EditHint: Move stuff on this topic from ConstCorrectness to here.
I appreciate ConstCorrectness enormously and miss it sorely in JavaLanguage. :-(
Some languages have RunTime constantness, with freeze and thaw*. Do they allow* thaw when running in a secure mode?
- Is that something like InterCal's snub and apologize?
Do freeze and thaw act on the object or the object reference?
Given...
Object nonConst;
Object const Const;
Object const & constRef = nonConst;
nonConst.foo(); // <-- calls foo() (non-const) if available
Const.foo(); // <-- must call foo() const
constRef.foo(); // <-- must call foo() const
...note that constancy is a form of encapsulation. Both the Const object and the constRef make their Object more encapsulated - meaning potentially safer and more robust - than the non-constant versions. So "const-correct" code generally extends more usages to constant things than to changeable things.
More literally:
interface FooConst{
int readX();
int readY();
},
abstract class Foo implements FooConst{
abstract public int readX();
abstract public int readY();
abstract public int writeX(int value);
abstract public int writeY(int value);
},
Methods that want a "const Foo" parameter need only declare a FooConst as their argument.