Kylar
Kylar

Reputation: 9334

Generic Visibility of inner classes?

I have a code piece that looks something like what I've pasted below:

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;
    }
  }
}

In my 'TheCache' class, I want to constrain the generic type to a specific, which is fine, but when I get the 'value' as a Container, it is somehow not typed, in that I cannot execute the doSomething method. Why?

Upvotes: 1

Views: 194

Answers (1)

Carl Manaster
Carl Manaster

Reputation: 40356

Just get rid of the <String, Container> bit in the class declaration:

private class TheCache extends LinkedHashMap<String, Container> {

It was treating "String" and "Container" as if they were the generic type identifiers (typically "T"). So it didn't know that the Container to which you were referring was your nested class.

Upvotes: 3

Related Questions