一个复杂的按键我有一个点对象:为番石榴缓存(移动)
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,更加模糊。 –