Общая видимость внутренних классов? - PullRequest
1 голос
/ 16 февраля 2010

У меня есть фрагмент кода, который выглядит примерно так, как я вставил ниже:

import java.util.LinkedHashMap;
import java.util.Map;

public class GenericMagic {
  GenericMagic() {
  }


  private class Container {
    int doSomething(){ return 42;}

    @Override
    public String toString() {
      return "Container"+doSomething();
    }
  }

  private class TheCache<String, Container> extends LinkedHashMap<String, Container> {
    @Override
    protected boolean removeEldestEntry(Map.Entry<String, Container> eldest) {
      Container value = eldest.getValue();
      value.doSomething();//if I comment this out it compiles
      System.out.println(value);
      return false;
    }
  }
}

В моем классе 'TheCache' я хочу ограничить универсальный тип конкретным, и это нормально, но когда я получаю 'value' в качестве контейнера, он как-то не печатается, так как я не могу выполнить doSomething метод. Почему?

1 Ответ

3 голосов
/ 16 февраля 2010

Просто избавьтесь от бита <String, Container> в объявлении класса:

private class TheCache extends LinkedHashMap<String, Container> {

Он обрабатывал «String» и «Container», как если бы они были идентификаторами универсального типа (обычно «T»). Поэтому он не знал, что контейнер, на который вы ссылались, был вашим вложенным классом.

...