1

Please assist in the below code for java.

CLASS1: I've the following code in Class1:

public String getnumber()
    {
          return this.number;
    }

CLASS2: I've another class Class2 with code set as:

Class1 cla = new Class1();
public String number_to_compute=cla.getnumber() // This is variable

CLASS3: I've a third class class3 where I'm executing some other methods:

Class1 class1 = new Class1();
Class2 class2 = new Class2();

 public static void main(String args[])
      {
           System.out.println(class1.getumber()); 
          System.out.println(class2.number_to_compute);
      }

OUTCOME:

In the above problem, class1.getumber() works fine and gives correct answer where as class2.number_to_compute outtputs null

Why is class2.number_to_compute a null value?

Gherbi Hicham
  • 2,416
  • 4
  • 26
  • 41
Prabhath
  • 55
  • 7

3 Answers3

1

The problem is that, You are creating new object for class1 in both class2 and class3 separately that's why both object is not dependent to each other.. if you want class2 and class3 have the same instance of class1, you need to create class1 as singleton which will always give the single object instance of class1.

Try as below :-

public class Class1
{
    private String number = null;
    private static Class1 class1 = null;
    public static Class1 getInstance() 
    {
         if(class1 == null)
            {
               class1 = new Class1();
            }
         return class1;
      }

    private Class1(){}

    public void setNumber(String number)
    {
        this.number = number;
    }

    public String getNumber()
    {
        return this.number;
    }
}

public class Class2
{
    Class1 cla = Class1.getInstance();
    public String number_to_compute = cla.getNumber();
}

public class Class3
{
  static Class1 class1 = Class1.getInstance();

  public static void main(String args[]) {

    class1.setNumber("123");
    Class2 class2 = new Class2();
    System.out.println(class1.getNumber());
    System.out.println(class2.number_to_compute);
  }
}

Hope it helps...:)

Saurabh Gaur
  • 23,507
  • 10
  • 54
  • 73
0

In Class2 you compute number_to_compute using cla object which is made inside Class2. (It doesn't use Class1 object in Class3)

Set the value of number in cla of Class2 properly.

class Class1
{
  String number;
  public String getnumber()
  {
    return this.number;
  }
}

class Class2
{
  Class1 cla; 
  public String number_to_compute;

  public Class2()
  {
    cla = new Class1();
    cla.number = "1";
    number_to_compute = cla.getnumber();
  }
}

class Class3
{
  Class1 class1;
  Class2 class2;

  public Class3()
  {
    class1 = new Class1();
    class1.number = "2";
    class2 = new Class2();
  }

  public static void main(String args[])
  {
    Class3 cl = new Class3();
    System.out.println(cl.class2.cla.getnumber()); 
    System.out.println(cl.class2.number_to_compute);
  }
}

or you can use the Class1 object you made in Class3

 class Class1
{
  String number;
  public String getnumber()
  {
    return this.number;
  }
}

class Class2
{
  Class1 cla; 
  public String number_to_compute;

  public Class2()
  {
    cla = new Class1();
    cla.number = "1";
    number_to_compute = cla.getnumber();
  }
}

class Class3
{
  Class1 class1;
  Class2 class2;

  public Class3()
  {
    class1 = new Class1();
    class1.number = "2";
    class2 = new Class2();
    class2.cla = class1;
  }

  public static void main(String args[])
  {
    Class3 cl = new Class3();
    System.out.println(cl.class2.cla.getnumber()); 
    System.out.println(cl.class2.number_to_compute);
  }
}

By the way, it is always good to use setters and getters to set instance variables.

Community
  • 1
  • 1
pahan
  • 567
  • 1
  • 8
  • 22
0

It works just fine for me. The only thing I saw that needed to be added was the static keyword to the class1 and class2 definitions in Class3. See below.

public class Class1
{
    String number = "1234";

    public String getnumber()
    {
        return this.number;
    }
}

public class Class2
{
    Class1 cla = new Class1();
    public String number_to_compute = cla.getnumber();
}

public class Class3
{
    static Class1 class1 = new Class1();
    static Class2 class2 = new Class2();

    public static void main(String args[])
    {
        System.out.println(class1.getnumber());
        System.out.println(class2.number_to_compute);
    }
}

When run, it outputs

1234
1234
JeffC
  • 22,180
  • 5
  • 32
  • 55