私はポイントオブジェクトを持っています:
class Point {
final int x,y;
...
}
これらのポイントは私のコードの至る所で使用/作成されるので、グアバキャッシュの使用を開始したいと思います。残念ながら、CacheLoaderは1つのパラメーターしか受け入れません。 ここでのstackoverflowに関する別の質問では、同様の問題にペアオブジェクトを使用します。しかし、キャッシュリクエストごとにダミーオブジェクトを作成するというアイデアは好きではありません。だから私は自分自身の回避策を考え出します:
オブジェクトはxとyで指定されているので、両方の値をlongにマージ(シフト)できると思います。これが私のキーになります。
void test(int x, int y) {
Long key = (long) ((long) (x) << Integer.SIZE | y);
Point point = cache.get(key);
}
CacheLoader<Long, Point> loader = new CacheLoader<Long, Point>() {
public Point load(Long key) throws Exception {
final int x,y;
// shift magic
x = (int) (key >> Integer.SIZE);
y = key.intValue();
return new Point(x, y);
}
};
私は実際にはシフト初心者です。これは機能しますか?私は何か見落としてますか?これはペアクラスよりも「速い」ですか?それが私の質問です!
はい、私はコードをテストしました、そしてそれは私が言うことができる今のところうまくいきます。