как передать частный int объекту в другом классе в Java - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь использовать 2 приватных значения из класса Test2 для a, но получаю сообщение об ошибке, говорящее, что a не инициализировано.Кто-нибудь может мне помочь?(Я новичок в Java)

///////////////////////////////////////////////////////////

public class Test{

   Test2 a = new Test2(a.getTestArray(), a.getNum1());

//////////////////////////////////////////////////////////////////////////////

public class Test2{
  private int[] testArray = {1, 2, 3, 4};
  private int num1 = 3;

  public void setTestArray(int[] testArray){
    this.testArray = testArray;
    }
  public void setNum1(int num1){
    this.num1 = num1;
    }
  public int[] getTestArray(){
    return this.testArray;
    }
  public int getNum1(){
    return num1;
    }
  public Test2(int[] testArray, int num1){
    this.testArray = testArray;
    this.num1 = num1;
    }

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Помните, что вы не можете вызвать метод из неинициализированной переменной,

В этой строке

 Test2 a = new Test2(a.getTestArray(), a.getNum1());

JVM пытается это:

  Test2 a;
  int temp1[] = a.getTestArray(); // this fails because 'a' is not initialized
  int temp2 = a.getNum1());
  a = new Test2(temp1, temp2 );

Я предлагаю вам добавить новое статическое поле в Test

private static int[] DEFAULT_TEST_ARRAY = {1, 2, 3, 4};
private static int[] DEFAULT_NUM = 3;

и в Test2 удалите значения по умолчанию

   private int[] testArray;
   private int num1;

Создавая статические атрибуты, мы можем использовать их, не создавая новый объект, используя класс в качестве ссылки вместо переменной.

Test2 a = new Test2(Test.DEFAULT_TEST_ARRAY,  Test.DEFAULT_NUM );

пс. Вы можете переместить DEFAULT_TEST_ARRAY, DEFAULT_NUM в Test2

0 голосов
/ 03 января 2019
Test2 a = new Test(a.getTestArray(), a.getNum1());

Вы пытаетесь вызвать метод для объекта, который инициализируете (a), прежде чем присвоить ему значение.

Я подозреваю, что вы имеете в виду что-то вроде:

a anA = new a();
Test2 test2 = new Test(anA.getTestArray(), anA.getNum1());

Вы на самом деле не хотите делать это на поле в классе Test, потому что тогда вы получите StackOverflowError, потому что вы создаете Test каждый раз, когда вы создаетеTest, который создает Test, который создает Test и т. д.

Вы, вероятно, хотите сделать это внутри метода, что-то вроде:

public class Test extends Test2 {
    public static void main(String[] args) {
      a anA = new a();
      Test2 test2 = new Test(anA.getTestArray(), anA.getNum1());
    }
}

Обратите внимание, чтовам нужно объявить, что Test или implements Test2 или extends Test2 (в зависимости от того, является ли Test2 интерфейсом или классом соответственно).

...