Simplify setter and getter of java class


 
Thread Tools Search this Thread
Top Forums Programming Simplify setter and getter of java class
# 1  
Old 02-01-2017
Simplify setter and getter of java class

I am trying to verify my understanding on setter and getter on java class with this example:
Code:
//MaximumFinder2.java

import java.util.Scanner;

public class MaximumFinder2
{
    public static void main (String[] args)
    {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter three floating numbers separated by spaces: ");
        double num1 = input.nextDouble();
        double num2 = input.nextDouble();
        double num3 = input.nextDouble();

        maximum max = new maximum(num1, num2, num3);

        System.out.println(max.getMaximum(num1, num2, num3));
    } //end of main()
} //end of class Maximum Finder2

and the maximum class
Code:
//maximum.java
public class maximum
{
    private double maximumValue;
//    public double a, b, c;

    maximum(double a, double b, double c) 
    {
        this.maximumValue = getMaximum(a, b, c);
    }

    public double getMaximum (double a, double b, double c) 
    {
        return setMaximum (a, b, c);
    }

    public double setMaximum (double x, double y, double z)
    {
        double maxVal = x;

        if (y > maxVal)
            maxVal = y;

        if (z > maxVal)
            maxVal = z;

        return maxVal;
    }
} //end of maximum class

The code is working, but I am not sure how to simplify the code for all those local variables: double a, b, c and double x, y, z. I tried using global version of them, which was commented out, to make the class simpler, but did not work. Are those local variables necessary to make the maximum class?
Thanks a lot!
# 2  
Old 02-02-2017
You don't need the local variable a,b,c, because all java functions pass primitive types by value (making a local copy of them). I would keep the same naming convention on setMaximum (calling the parameters a,b,c), because I see no reason to make it different from getMaximum and maximum. FInally I would get rid of maximum (not necessary), make setMaximum a void function (returns nothing) and decouple getMaximum from setMaximum (not calling setMaximum from inside it)and make it return maxVal instead of SetMaximum.

Edit. Another possible better solution would be to create a third function called calculateMaximum or something like that and put in it all the logic that it is currently in setMaximum. After it determines the greatest value it could call directly setMaximum that would have as it's only parameter the biggest value. In that case calculateMaximum would be void.
Or you can make it return the biggest value (in this case it won't be a void function), throw it in some variable and pass the variable as the argument for setMaximum, or be more direct and use determineMaximum as the argument of setMaximum, as it will return the maximum value that will be passed to setMaximum

Last edited by colt; 02-02-2017 at 07:12 PM..
# 3  
Old 02-03-2017
Thanks colt!
I rewrote the code. Please comment on any mistake or improvement to get the "simplest" version of the code as I am still quite vague with your suggestions.
Code:
import java.util.Scanner;

public class MaximumFinder6
{
    public static class Maximum            
    {
        private double maximumValue;

        public void setMaximum (double x, double y, double z)
        {
            this.maximumValue = x;

            if (y > this.maximumValue)
                this.maximumValue = y;

            if (z > this.maximumValue)
                this.maximumValue = z;

        }  //End of setMaximum. This only set the maximumValue within the class,

        public double getMaximum ()
        {
            return this.maximumValue;
        }
    } //end of maximum class

    public static void main (String[] args)
    {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter three floating numbers separated by spaces: ");
        double num1 = input.nextDouble();
        double num2 = input.nextDouble();
        double num3 = input.nextDouble();

        Maximum max = new Maximum();

        max.setMaximum(num1, num2, num3);
        System.out.println(max.getMaximum());

    } //end of main()
} //end of class MaximumFinder6

This version does not have the constructor with parameter I am learning.
What is the reason you said there is no need for the constructor here? Thanks!

Last edited by yifangt; 02-03-2017 at 01:45 PM.. Reason: Typo and modification
# 4  
Old 02-03-2017
Personally, when passing values to a constructor, I would expect it to be to pass values that probably won't be changed until the object's end of life. When thinking of setters and getters, it's usually to be expected to change values that change a certain number of times. So in this case I wouldn't bother to create a constructor just to do something that the getter and setter do fine. Would create one just to pass value that I expect won't change until the object reaches the end of his life.

But there is nothing wrong with what you did, it's fine if you want to use it.
This User Gave Thanks to colt For This Post:
# 5  
Old 02-06-2017
Thanks!
I wish I could catch the reasons behind your comments, which seems to me quite advanced. The original version did not use constructor at all and simply a function to do the same job. I believe I need dig into more of Java to get what you meant. Thank you again!
# 6  
Old 02-10-2017
why the local variables though
# 7  
Old 03-16-2017
Question Nice Question

In Java getters and setters are completely ordinary functions. The only thing that makes them getters or setters is convention. A getter for foo is called getFoo and the setter is called setFoo. In the case of a boolean, the getter is called isFoo. They also must have a specific declaration as shown in this example of a getter and setter for 'name':

Code:
  1. class Dummy {
  2. private String name;
  3. public Dummy() {}
  4. public Dummy(String name) {
  5. this.name = name;
  6. }
  7. public String getName() {
  8. return this.name;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. }

The reason for using getters and setters instead of making your members public is that it makes it possible to change the implementation without changing the interface. Also, many tools and toolkits that use reflection to examine objects only accept objects that have getters and setters. JavaBeans for example must have getters and setters as well as some other requirements.


Moderator's Comments:
Mod Comment Please use CODE tags as required by forum rules!
And, don't use these fora for advertising your personal web site.

Last edited by RudiC; 03-16-2017 at 06:24 AM.. Reason: Added CODE tags, removed personal URL.
This User Gave Thanks to grabbitmedia For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Programming

Java Date Class

I am looking at a website to learn Java and this is one of the exercises. Write a program that will show different time and date information based on what number you send it. The codes are: 0 - number of milliseconds since January 1, 1970 1 - number of seconds since January 1, 1970 2 -... (6 Replies)
Discussion started by: totoro125
6 Replies

2. Shell Programming and Scripting

setter and getter functions for file manipulation with sed

Hi, I would really appreciate some help, I couldn't nail my problem: I would like to create some setter and getter functions to make my life easier. my sample file contains: keyword - some tabs - value - semicolon number 12.1; float .3; double 12; real 12.2324; stuff .234; decimal... (5 Replies)
Discussion started by: Toorop
5 Replies

3. Programming

Link array to class java

Hi, I need help to Link array from one class to another class Firstly CSVParser Class what it did is load csv file and store into array Secondly WarehouseItem where each record is store How can I get a list of array that I load to CSVParser Class and store them to WarehouseItem and... (0 Replies)
Discussion started by: guidely
0 Replies

4. Programming

Help in JAVA main and class

Is anyone know how to write a class in separate file? While method does it needs to be contained in a printwriter class? Can I have the format of the printwriter class as a reference? Thanks a lot. (1 Reply)
Discussion started by: eel
1 Replies

5. Programming

how abstract class differs in Java and C++?

hello all, i want to know if there is any difference in working and syntax declaration of abstract class in Java and C++. (1 Reply)
Discussion started by: haravivar
1 Replies

6. Fedora

Help, how to dynamicly load java class

Hi, everyone: I'm trying to connect to DB using JDBC on fedora. I have successfully installed jdk and it's ok to run common java program. The environment variables: JAVA_HOME=/installed/mycoy/jdk1.6.0 PATH=$JAVA_HOME/bin:$PATH... (3 Replies)
Discussion started by: mycoy
3 Replies

7. Shell Programming and Scripting

call constructor of java class in script

Hi, Is it possible to call the constructur of a java class in a shell script? I know you can call static methods, but can you also call the constructor? tnx. (1 Reply)
Discussion started by: thebladerunner
1 Replies

8. Shell Programming and Scripting

Function loading in a shell scripting like class loading in java

Like class loader in java, can we make a function loader in shell script, for this can someone throw some light on how internally bash runs a shell script , what happenes in runtime ... thanks in advance.. (1 Reply)
Discussion started by: mpsc_sela
1 Replies

9. Shell Programming and Scripting

Running java class with a cron

Hello everybody, I have a problem about running a java class with a cron : I have Cron.txt file which has : 0,5,10,15,20,25,30,35,40,45,50,55 * * * * CronJava.txt I have CronJava.txt wihich has : cd ias/j2ee/SapAktarim/applications/SapAktarim/SapAktarim/WEB-INF/classes/;java -classpath... (3 Replies)
Discussion started by: UBGandalf
3 Replies
Login or Register to Ask a Question