2011-12-31 5 views
1

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

Допустим, вы следующий в классе А:

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

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

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

+0

Можете ли вы внести изменения в ClassA? Если это так, добавьте метод getter в ClassA и вызовите это из другого класса, создав экземпляр ClassA. – kosa

ответ

3

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

public class Whatever { 

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

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

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

Whatever w = new Whatever(); 
BlockingQueue<byte[]> buffer = w.getBuffer(); 
+0

Спасибо, он отлично поработал. – gtdevel

2

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

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

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

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

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

Тогда вы можете получить доступ к нему по телефону getBuffer():

BlockingQueue<byte[]> bq = myobj.getBuffer(); 
2

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

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(); } 

} 
+1

Спасибо, Питер, я делал это для начала, но у меня были проблемы, поэтому я делал некоторые проверки ошибок, используя другой метод. Я с вами полностью согласен. – gtdevel

Смежные вопросы