-1

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

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

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,因为它是一个私有类,我无法访问它。

4

1 回答 1

0

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

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允许从同一包含类中访问私有内部类,甚至访问此类类的私有成员:

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

于 2021-05-27T12:04:27.843 回答