访问内部类私有的类?

时间:2010-05-09 05:13:20

标签: java oop inner-classes

Class Outer
{
 ...
    private class Node
    {
      private T data;
      ...

      private T getData()
      {
         return data;
      }
    }
}

如果外部类可以访问内部类私有成员,那么使用set和get方法的目的是什么?将内部类私有化的目的是什么?包裹访问?

3 个答案:

答案 0 :(得分:9)

当您不希望将类暴露给包内或包外的外部类时,将编写私有内部类。它们仅在外层级别中使用。

getter和setter在私有类中通常没有意义,因为无论如何都可以访问实例变量。

答案 1 :(得分:4)

可以跳过琐碎的getter和setter,但这些方法通常都是非平凡的(常见的情况是'延迟加载'模式)。

编辑添加:延迟加载是指在请求数据时仅实例化成员。当获取数据并不总是需要并且获取数据昂贵时使用它。

class a
{
private:
    int m_aNumber;
    bigDeal *m_pBig;

public:
    a() { m_aNumber = 0; m_pBig = NULL; }
    ~a() { if (m_pBig) delete m_pBig; }

    // trivial
    int get_aNumber() { return m_aNumber;}
    void set_aNumber(int val) { m_aNumber = val; }

    // lazy load
    bigDeal *get_Big()
    {
        if (m_pBig == NULL)
        {
            // bigDeal::bigDeal() downloads data from Mars Rover
            // takes 20 minutes, costs $1.2 million dollars to run
            m_pBig = new(bigDeal); 
        }
        return m_pBig;
    }
    void set_Big(bigDeal *val)
    {
        m_pBig = val;
    }
}

答案 2 :(得分:1)

首先,我会说对待内部public / protected / internal类的方式与处理任何其他“外部”类的方式相同。意思是,使用相同的设计原则。

对于内部类,当我使用内部私有类时,它们通常最终只是一堆字节...意味着它们不进行实际处理。他们只是为了让外部类更容易编写代码。

我并没有告诉你编写错误的代码,但是你的内部私有类在你的设计中可能会更加松懈。作为一般规则,它们应该是简单和轻量级的......不要在内部类上过分使用OO。此外,如果您最终必须更改内部类中的任何内容,则只需更新外部类中的引用... TBH根本不是什么大问题。

相关问题