技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Javaで束縛(bind)とか

こんなんやったら絶対怒られるよな。

使ってる要素は、
Generics,匿名クラス,autoboxing
位だろうか?

やってみればわかるが、変数「map」が関数終了後もメモリに存在し、束縛される。
map のと、インターフェースを弄れば、キャッシュ実装できるんじゃね?

import java.util.*;

interface test {
  String get(int x);
  void set(int x,String val);
}

public class testcode
{
  static test getTestCode() {
    final HashMap<Integer,String> map = new HashMap<Integer,String>();

    return new test() {
      public String get(int x) {
        return map.get(x);
      }
      public void set(int x,String val) {
        map.put(x,val);
      }
    };
  }

  public static void main(String ...args) {
    test sample = getTestCode();
    test sample2 = getTestCode();
    sample.set(24,"Fuyukaze");
    sample2.set(24,"Hage");
    System.out.println(sample.get(24));
  }
}

Javaも変な言語になったもんだと、ここの人 と話してた。