Search code examples
javareadonly

Do we have a Readonly field in java (which is set-able within the scope of the class itself)?


How can we have a variable that is writable within the class but only "readable" outside it?

For example, instead of having to do this:

Class C {
  private int width, height;

  int GetWidth(){
    return width;
  }

  int GetHeight(){
    return height;
  }

  // etc..

I would like to do something like this:

Class C {
  public_readonly int width, height;

  // etc...

What's the best solution?


Solution

  • There's no way to do this in Java.

    Your two options (one which you mentioned) are using public getters and making the field private, or thorough documentation in the class.

    The overhead on getter methods in extremely small (if at all). If you're doing it a large number of times, you might want to cache the fetched value instead of calling the get method.

    EDIT:

    One way to do it, although it has even more overhead than the getter, is defining a public inner class (let's call it innerC) with a constructor that is only available to your C class, and make your fields public. That way, you can't create innerC instances outside your class so changing your fields from outside is impossible, yet you can change them from inside. You could however read them from the outside.