是否可以从Java中的另一个类访问一个类中的变量实例。
假设你在A组中有以下内容:
private BlockingQueue<byte[]> buffer = new LinkedBlockingQueue<byte[]>();
我想对此类中的队列进行更改,然后可以使用它从另一个类访问它。
我如何从另一个类访问缓冲区的实例?它甚至可能吗?
答案 0 :(得分:3)
添加一个getter:
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();
答案 1 :(得分:2)
将private
更改为public
。然后你可以像这样访问变量缓冲区:
A myobj = new A();
BlockingQueue<byte[]> bq = myobj.buffer;
有关详细信息,请参阅有关访问控制的文章:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
更好的方法是使用getter。也就是说,在班级get()
中创建A
方法,只返回buffer
。
public BlockingQueue<byte[]> getBuffer() {
return buffer
}
然后您可以致电getBuffer()
:
BlockingQueue<byte[]> bq = myobj.getBuffer();
答案 2 :(得分:2)
通常最好封装集合,而不是公开集合本身。相反,您应该公开您想要执行的操作
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(); }
}