如何调用私有本地类

问题描述

所以,在一个更大的类中,有一个本地私有类,我稍后需要将其用于方法,但我不知道如何访问它...

我无法更改的私有类,因为它是练习的一部分,如下所示:

private class Counter 
 {
   String element;
   int frequency;             
   Counter (String element) 
   {
     this.element = element;
     frequency = 0;
   } 
   String element() {
       return this.element;
   }
 }

我需要实现的方法是将 Id 及其频率添加到频率列表 lf 中,如下所示:

private void update (String id,IList<Counter> lf) 
  {
      
  }

我正在尝试使用 IList 中的 add 方法,但我不知道如何使用类型 Counter,因为它是一个私有类,我无法访问它。

解决方法

假设以下起始类(不,这不是解决方案)

public class Bigger {

    // inner class should not be changed
    private class Counter {
        String element;
        int frequency;             

        Counter (String element) {
            this.element = element;
            frequency = 0;
        } 

        String element() {
            return this.element;
        }
    }

    private void update (String id,IList<Counter> lf) {
        // TODO 
    }
}

要访问 Counter 中的 update,我们可以这样写:

public class Bigger {
    // ...
    private void update (String id,IList<Counter> lf) {
        Counter counter = new Counter(id);
        // eventually call counter.element()
        // or accessfields like counter.frequency = 1;
        // TODO 
    }
}

注意:Counter 不是本地类,而是内部类(我假设是一个,因为本地类不能声明为 private)。

JLS 6.6.1 允许访问私有内部类,甚至从同一个 包含 类中访问此类类的私有成员:

否则,成员或构造函数被声明为私有。仅当访问发生在包含成员或构造函数声明的顶级类或接口的主体内时,才允许访问。