Why would you declare getters and setters method private?

19,129

Solution 1

I can think of several reasons:

  • you want to prevent future public access.

If a different programmer sees your code and wants access to a variable, but there are no setters and getters, he might think you just forgot about them, and add them themselves. However, if you declare them as private, it's a statement of intent, saying I don't want these variables to be changed or accessed from the outside.

  • you want to associate setting and getting with other actions

Say you don't want public accessors. But maybe you want a count of how many times a private variable is changed. It's easier to use a setter rather than incrementing the count every time you access that variable.

  • you want a central access point

Again, you don't want public access, but during debugging, you might want to put a breakpoint in every place a private member is changed. So instead of setting breakpoints everywhere in the class, you just set one in the accessor.

Solution 2

That's exactly opposite of what we are trying to achieve through getters and setters.

Actually, it is not. The reason for declaring public getters and setters is to hide the fields. This is done to avoid unwanted coupling; i.e. clients of an API depending on the implementation details of the API. (That coupling can be problematic for a number of reasons. For example, dependencies on the types of the fields, the possibility of unexpected changes to the fields.)

The reason for declaring the getters and setters private is to make the corresponding part of the object's abstract state (i.e. the values) private. That's largely independent of the decision to use getters and setters or not to hide the implementation types, prevent direct access, etc.

While the case for using getters and setters is not as strong for private state, there are still tangible benefits in using private getters and/or setters. For instance:

  • The private getter/setter methods provide a place for adding extra behavior or error checking code.

  • They can provide a place for logging state changes or access to the fields.

  • They can provide a place for adding your debug code while testing. (Probably not the best way of debugging.)

Share:
19,129

Related videos on Youtube

Vandan Patel
Author by

Vandan Patel

Updated on June 04, 2022

Comments

  • Vandan Patel
    Vandan Patel about 2 years

    I saw a code where getters and setters methods are declared private. I am trying to figure out the logic behind it, and I am really having hard time to understand why would you declare them as private? That's exactly opposite of what we are trying to achieve through getters and setters.