Mam obiekt Point:Złożony klucz do Cache guawy (zmiany biegów)
class Point {
final int x,y;
...
}
Ponieważ będzie używana te punkty/utworzonego w każdym miejscu w moim kodu, chcę zacząć korzystać z guawy cache. Niestety, CacheLoader akceptuje tylko jeden parametr. Another question tutaj na stackoverflow użyj obiektu pary dla podobnego problemu. Ale nie podoba mi się pomysł stworzenia obiektu obojętnego dla każdego żądania pamięci podręcznej. Więc wymyślam moje własne obejście:
Ponieważ obiekt jest określony przez xiy, myślę, że mogę scalić (przesunąć) obie wartości w długą, która będzie moim kluczem.
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);
}
};
Jestem rzeczywiście noob shift. Czy to zadziała? Przegapiłem coś? Czy jest to "szybsze" niż klasa pary? To jest moje pytanie!
Tak, testuję kod i działa on do tej pory.
Jezu. * Proszę * stworzyć prawdziwy obiekt (z dwoma dobrze nazwanymi polami) dla punktu! Już tworzysz obiekt "dummy", java.lang.Long, po prostu bardziej zaciemniony. –