从Java中的另一个类访问变量实例

从Java中的另一个类访问变量实例,java,class,buffer,instance,Java,Class,Buffer,Instance,可以从Java中的另一个类访问一个类中变量的实例吗 假设你在A班有以下几项: private BlockingQueue<byte[]> buffer = new LinkedBlockingQueue<byte[]>(); private BlockingQueue buffer=new LinkedBlockingQueue(); 我希望在此类中对队列进行更改,然后能够使用从另一个类访问它 如何从另一个类访问缓冲区实例?甚至有可能吗?将私有更改为公共。然后您可以像

可以从Java中的另一个类访问一个类中变量的实例吗

假设你在A班有以下几项:

private BlockingQueue<byte[]> buffer = new LinkedBlockingQueue<byte[]>();
private BlockingQueue buffer=new LinkedBlockingQueue();
我希望在此类中对队列进行更改,然后能够使用从另一个类访问它


如何从另一个类访问缓冲区实例?甚至有可能吗?

私有
更改为
公共
。然后您可以像这样访问变量缓冲区:

A myobj = new A();
BlockingQueue<byte[]> bq = myobj.buffer;
然后,您可以通过调用
getBuffer()
来访问它:

BlockingQueue bq=myobj.getBuffer();

私有
更改为
公共
。然后您可以像这样访问变量缓冲区:

A myobj = new A();
BlockingQueue<byte[]> bq = myobj.buffer;
然后,您可以通过调用
getBuffer()
来访问它:

BlockingQueue bq=myobj.getBuffer();
添加一个getter:

public class Whatever {

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

    public BlockingQueue<byte[]> getBuffer() {
        return buffer;
    }
}
公共类{
private BlockingQueue buffer=新建LinkedBlockingQueue();
public BlockingQueue getBuffer(){
返回缓冲区;
}
}
然后,如果您有任何实例:

Whatever w = new Whatever();
BlockingQueue<byte[]> buffer = w.getBuffer();
Whatever w=新的Whatever();
BlockingQueue buffer=w.getBuffer();
添加一个getter:

public class Whatever {

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

    public BlockingQueue<byte[]> getBuffer() {
        return buffer;
    }
}
公共类{
private BlockingQueue buffer=新建LinkedBlockingQueue();
public BlockingQueue getBuffer(){
返回缓冲区;
}
}
然后,如果您有任何实例:

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

通常最好封装集合,而不是公开集合本身。相反,您应该公开要执行的操作

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

}
公共类{
private final BlockingQueue buffer=新建LinkedBlockingQueue();
public void enque(字节[]字节){buffer.add(字节);}
公共字节[]takeNext(){return buffer.take();}
}

通常最好封装集合,而不是公开集合本身。相反,您应该公开要执行的操作

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

}
公共类{
private final BlockingQueue buffer=新建LinkedBlockingQueue();
public void enque(字节[]字节){buffer.add(字节);}
公共字节[]takeNext(){return buffer.take();}
}

您可以更改ClassA吗?如果是这样,在ClassA中添加getter方法,并通过实例化ClassA从另一个类调用该方法。您可以对ClassA进行更改吗?如果是这样,请在ClassA中添加getter方法,并通过实例化ClassA从另一个类调用该方法。谢谢Peter,我一开始就是这么做的,但是我遇到了问题,所以我使用另一个方法进行了一些错误检查。我完全同意你的观点。谢谢Peter,我一开始就是这么做的,但是我遇到了问题,所以我用另一种方法做了一些错误检查。我完全同意你的意见。