2011-12-31 148 views
1

是否可以從Java中的另一個類訪問一個類中的變量實例?從Java中的另一個類訪問變量的實例

比方說,你已經在A級以下:

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

我想在這個類更改隊列,然後可以使用從另一個類訪問它。

我將如何從另一個類訪問緩衝區的實例?它甚至有可能嗎?

+0

您可以對ClassA進行更改嗎?如果是這樣,請在ClassA中添加getter方法,並通過實例化ClassA從另一個類中調用該方法。 – kosa 2011-12-31 17:40:24

回答

3

添加一個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(); 
+0

謝謝,它效果很好。 – gtdevel 2011-12-31 17:47:54

2

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

它通常是最好的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 2011-12-31 19:06:18

相關問題