2011-12-31 108 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

相关问题