一個複雜的按鍵我有一個點對象:爲番石榴緩存(移動)
class Point {
final int x,y;
...
}
因爲這點,將用於/在我的代碼創建了所有的地方,我要開始使用番石榴緩存。不幸的是,CacheLoader只接受一個參數。 Another question這裏在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);
}
};
我其實是一個班次noob。這會工作嗎?我錯過了什麼?這是否比雙人班「更快」?這是我的問題!
是的,我測試的代碼,它的工作到目前爲止,我可以告訴。
讓人驚訝。 *請*創建一個真正的對象(有兩個命名的領域)的重點!您已經創建了一個'dummy'對象,一個java.lang.Long,更加模糊。 –