Java: Доступ к общедоступному члену из несвязанного класса? - PullRequest
2 голосов
/ 02 мая 2011

Следующий код Java представляет собой упрощенный пример кода, который мне нужен.У меня вопрос, как я могу получить доступ к SomeInt из класса Second?Обратите внимание, что Second реализует другой класс, поэтому я не могу просто передать someInt.

package test1;

public class First {
    public int someInt;

    public static void main(String[] args) {
        First x = new First();
    }

    public First(){
        someInt = 9;
        Second y = new Second();
    }
}


class Second implements xyz{
    public Second(){}

    public void doSomething(){
        someInt = 10; // On this line, the question lies.
        System.out.println(someInt);
    }
}

Ответы [ 6 ]

1 голос
/ 02 мая 2011

Вы не можете получить доступ к полю First someInt в Second, поскольку Second не является внутренним классом First.Изменения, приведенные ниже, исправят вашу проблему.

package test1;

public class First {
    public int someInt;

    public static void main(String[] args) {
        First x = new First();
    }

    public First(){
        someInt = 9;
        Second y = new Second();
    }

    class Second {
        public Second(){
            someInt = 10;
            System.out.println(someInt);
        }
    }
}
1 голос
/ 02 мая 2011

Самый прямой способ будет

1) экземпляр First

First f = new First()

2) доступ к нему напрямую, потому что вы сделали переменную экземпляра someInt общедоступной

f.someInt = 10

Лучшим способом было бы предоставить аксессоры для SomeInt в First и сделать это таким образом.

First f = new First();
f.setSomeInt( 10 );
...
int x = f.getSomeInt();
1 голос
/ 02 мая 2011

Доступ к общедоступному члену следует тем же правилам синтаксиса, что и доступ к общедоступному методу (только без скобок)

Но наличие общедоступного члена в классе, как правило, не очень хорошая идея

1 голос
/ 02 мая 2011

Если вам нужно получить доступ к полю в First (а не создавать новое в Second), вам нужно передать ссылку на экземпляр First при создании экземпляра Second.

        Second y = new Second(this);
    }
}


class Second {
    public Second(First f){
        f.someInt = 10;

В терминах вашего вопроса «Доступ к общедоступному члену из несвязанного класса» проблема решается путем создания отношения.Если это не разрешено, этот ответ неверен.

0 голосов
/ 02 мая 2011

Вам необходимо получить ссылку на экземпляр из First, поскольку someInt не является статическим.

0 голосов
/ 02 мая 2011

В вашем втором классе у вас должен быть объект первого класса.Создайте этот объект во втором классе, и вы сможете получить доступ к someInt.

...