Доступ к экземпляру переменной из другого класса в Java - PullRequest
1 голос
/ 31 декабря 2011

Возможно ли получить доступ к экземпляру переменной в одном классе из другого класса в Java.

Допустим, у вас есть следующее в классе A:

private BlockingQueue<byte[]> buffer = new LinkedBlockingQueue<byte[]>();

Я хочувнести изменения в очередь в этом классе и затем использовать ее для доступа к ней из другого класса.

Как получить доступ к экземпляру буфера из другого класса?Это вообще возможно?

Ответы [ 3 ]

3 голосов
/ 31 декабря 2011

Добавить получатель:

public class Whatever {

    private BlockingQueue<byte[]> buffer = new LinkedBlockingQueue<byte[]>();

    public BlockingQueue<byte[]> getBuffer() {
        return buffer;
    }
}

Тогда, если у вас есть экземпляр Whither:

Whatever w = new Whatever();
BlockingQueue<byte[]> buffer = w.getBuffer();
2 голосов
/ 31 декабря 2011

Обычно лучше инкапсулировать коллекции, а не раскрывать сами коллекции. Вместо этого вы должны выставить операции, которые вы хотите выполнить

public class Whatever {

    private final BlockingQueue<byte[]> buffer = new LinkedBlockingQueue<byte[]>();

    public void enque(byte[] bytes) { buffer.add(bytes); }

    public byte[] takeNext() { return buffer.take(); }

}
2 голосов
/ 31 декабря 2011

Измените private на public.Затем вы можете получить доступ к буферу переменных следующим образом:

A myobj = new A();
BlockingQueue<byte[]> bq = myobj.buffer;

Для получения более подробной информации обратитесь к этой статье об управлении доступом: http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

Возможно, лучший способ сделать это - использовать геттеры.То есть, создайте метод get() в классе A, который просто возвращает buffer.

public BlockingQueue<byte[]> getBuffer() {
    return buffer
}

Затем вы можете получить к нему доступ, вызвав getBuffer():

BlockingQueue<byte[]> bq = myobj.getBuffer();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...