Ho un oggetto punto:Una chiave complessa per guaiave Cache (shifting)
class Point {
final int x,y;
...
}
Dato che questi punti saranno utilizzati/creato in tutto il luogo nel mio codice, voglio iniziare a utilizzare la cache guaiave. Unfortuinally il CacheLoader accetta solo un parametro. Another question qui su stackoverflow utilizzare un oggetto coppia per un problema simile. Ma non mi piace l'idea di creare un oggetto fittizio per ogni richiesta di cache. Quindi mi viene in mente la mia soluzione:
Poiché l'oggetto è specificato da x e y, penso di poter unire (spostare) entrambi i valori in un valore lungo, che sarà la mia chiave.
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);
}
};
In realtà sono un noob turno. Funzionerà? Ho dimenticato qualcosa? Questo è "più veloce" rispetto alla coppia? Questa è la mia domanda!
Sì, provo il codice e funziona così lontano che posso dire.
yikes. * Per favore * crea un oggetto reale (con due campi ben denominati) per il punto! Stai già creando un oggetto "fittizio", un java.lang.Long, solo più offuscato. –