【问题标题】:Accessing an instance of a variable from another class in Java从 Java 中的另一个类访问变量的实例
【发布时间】:2011-12-31 17:36:53
【问题描述】:

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

假设您在 A 类中有以下内容:

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

我想对这个类中的队列进行更改,然后能够使用它从另一个类中访问它。

如何从另一个类访问缓冲区的实例?有没有可能?

【问题讨论】:

  • 您可以对 ClassA 进行更改吗?如果是这样,在 ClassA 中添加 getter 方法并通过实例化 ClassA 从另一个类中调用它。

标签: java class buffer instance


【解决方案1】:

添加一个吸气剂:

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

【讨论】:

    【解决方案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(); }
    
    }
    

    【讨论】:

    • 谢谢彼得,我一开始就是这样做的,但是我遇到了问题,所以我使用另一种方法进行了一些错误检查。我完全同意你的看法。
    【解决方案3】:

    private 更改为public。然后你可以像这样访问变量缓冲区:

    A myobj = new A();
    BlockingQueue<byte[]> bq = myobj.buffer;
    

    更多详情请参考这篇关于访问控制的文章:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

    一个可以说是更好的方法是使用 getter。也就是说,在类A 中创建一个get() 方法,它只返回buffer

    public BlockingQueue<byte[]> getBuffer() {
        return buffer
    }
    

    然后你可以通过调用getBuffer()来访问它:

    BlockingQueue<byte[]> bq = myobj.getBuffer();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-21
      • 2011-04-28
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2013-03-24
      相关资源
      最近更新 更多