1

以下に貼り付けたようなコード部分があります。

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」クラスでは、ジェネリック型を特定の型に制限したいのですが、これは問題ありませんが、「値」をコンテナーとして取得すると、doSomething メソッドを実行できないという点で、何らかの形で型付けされません。なんで?

4

1 に答える 1

3

<String, Container>クラス宣言のビットを取り除くだけです:

private class TheCache extends LinkedHashMap<String, Container> {

「String」と「Container」をジェネリック型識別子 (通常は「T」) であるかのように扱っていました。したがって、参照しているコンテナがネストされたクラスであることを知りませんでした。

于 2010-02-16T18:32:30.770 に答える