是否可以從Java中的另一個類訪問一個類中的變量實例?從Java中的另一個類訪問變量的實例
比方說,你已經在A級以下:
private BlockingQueue<byte[]> buffer = new LinkedBlockingQueue<byte[]>();
我想在這個類更改隊列,然後可以使用從另一個類訪問它。
我將如何從另一個類訪問緩衝區的實例?它甚至有可能嗎?
是否可以從Java中的另一個類訪問一個類中的變量實例?從Java中的另一個類訪問變量的實例
比方說,你已經在A級以下:
private BlockingQueue<byte[]> buffer = new LinkedBlockingQueue<byte[]>();
我想在這個類更改隊列,然後可以使用從另一個類訪問它。
我將如何從另一個類訪問緩衝區的實例?它甚至有可能嗎?
添加一個getter:
public class Whatever {
private BlockingQueue<byte[]> buffer = new LinkedBlockingQueue<byte[]>();
public BlockingQueue<byte[]> getBuffer() {
return buffer;
}
}
然後,如果你擁有的任何實例:
Whatever w = new Whatever();
BlockingQueue<byte[]> buffer = w.getBuffer();
謝謝,它效果很好。 – gtdevel 2011-12-31 17:47:54
將private
更改爲public
。然後,你可以訪問變量緩衝區這樣的:
A myobj = new A();
BlockingQueue<byte[]> bq = myobj.buffer;
有關詳細信息,請參閱本文訪問控制:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
一個這樣做是利用干將可以說是更好的辦法。也就是說,在類A
中創建一個get()
方法,該方法僅返回buffer
。
public BlockingQueue<byte[]> getBuffer() {
return buffer
}
然後你就可以通過調用getBuffer()
訪問:
BlockingQueue<byte[]> bq = myobj.getBuffer();
它通常是最好的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(); }
}
感謝彼得,我是這樣開始的,但是我遇到了問題,所以我正在使用其他方法進行錯誤檢查。我完全贊成你。 – gtdevel 2011-12-31 19:06:18
您可以對ClassA進行更改嗎?如果是這樣,請在ClassA中添加getter方法,並通過實例化ClassA從另一個類中調用該方法。 – kosa 2011-12-31 17:40:24