У меня есть точечный объект:
class Point {
final int x,y;
...
}
Поскольку эти точки будут использоваться/создаваться повсюду в моем коде, я хочу начать использовать кеш гуавы. К сожалению, CacheLoader принимает только один параметр. Еще один вопрос здесь, в stackoverflow, используйте объект пары для аналогичная проблема. Но мне не нравится идея создавать фиктивный объект для каждого запроса кэша. Поэтому я придумываю свой собственный обходной путь:
Поскольку объект определяется x и y, я думаю, что могу объединить (сдвинуть) оба значения в длинное, которое будет моим ключом.
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);
}
};
На самом деле я новичок в смене. Будет ли это работать? Я что-то пропустил? Это «быстрее», чем парный класс? Это мой вопрос!
Да, я тестирую код, и насколько я могу судить, он работает.