PDA

View Full Version : [Java] - referenze ad oggetti


Rikislavd
11-12-2007, 17:24
Java non utilizza puntatori espliciti, tutti gli oggetti sono passati per referenza. Cosa deve fare uno quando ha bisogno solo della referenza e non dell'oggetto? E' da un po' che mi rompo la testa o nuoto nel classico bicchiere d'acqua... Spiego il problema.

-Ho una grande numero di oggetti in alcuni "Vector" statici.
-Utilizzo combinazioni di oggetti tratti dai sopraddetti vettori.

In quanto vorrei tenere traccia di tali combinazioni vorrei salvare il vettore dei sottoinsiemi su database o disco.

Il processo di serializzazione standard salva l'intero oggetto (improponibile - gli oggetti sono numerosi e complessi).

Come faccio a scorporare la referenza e salvare solo il "puntatore" all'oggetto per riutilizzarlo in un secondo momento?

Riki

k0nt3
11-12-2007, 17:55
non ho capito benissimo qual'è il problema, comunque forse ti serve costruire una hash map.. ogni oggetto ha già associato un hash univoco raggiungibile con x.hashCode()
se puoi spiegare meglio quello che devi fare magari si riesce a trovare la soluzione più adatta

Angus
11-12-2007, 17:56
Java non utilizza puntatori espliciti, tutti gli oggetti sono passati per referenza. Cosa deve fare uno quando ha bisogno solo della referenza e non dell'oggetto? E' da un po' che mi rompo la testa o nuoto nel classico bicchiere d'acqua... Spiego il problema.

-Ho una grande numero di oggetti in alcuni "Vector" statici.
-Utilizzo combinazioni di oggetti tratti dai sopraddetti vettori.

In quanto vorrei tenere traccia di tali combinazioni vorrei salvare il vettore dei sottoinsiemi su database o disco.

Il processo di serializzazione standard salva l'intero oggetto (improponibile - gli oggetti sono numerosi e complessi).

Come faccio a scorporare la referenza e salvare solo il "puntatore" all'oggetto per riutilizzarlo in un secondo momento?

Riki

Un riferimento in Java non lo puoi "trattare" come un puntatore in C: non sono la stessa cosa. Comunque, se ho capito il problema, puoi pensare di utilizzare gli indici dei tuoi array statici come base di partenza per comporre un "indirizzo virtuale" dei tuoi oggetti: nel database potresti salvare, per esempio, {vettore:121, indice:872364}.

Angus
11-12-2007, 18:17
non ho capito benissimo qual'è il problema, comunque forse ti serve costruire una hash map.. ogni oggetto ha già associato un hash univoco raggiungibile con x.hashCode()
se puoi spiegare meglio quello che devi fare magari si riesce a trovare la soluzione più adatta

Non è esattamente così: è più corretto affermare che ogni istanza di Object può avere un hashCode() univoco. Object.hashCode() (http://java.sun.com/javase/6/docs/api/java/lang/Object.html#hashCode())


String a1 = new String("ab");
String a2 = new String("bC");
System.out.println("" + (a1.hashCode() == a2.hashCode()));


Questo codice stampa "true".

Rikislavd
11-12-2007, 18:44
Un riferimento in Java non lo puoi "trattare" come un puntatore in C: non sono la stessa cosa. Comunque, se ho capito il problema, puoi pensare di utilizzare gli indici dei tuoi array statici come base di partenza per comporre un "indirizzo virtuale" dei tuoi oggetti: nel database potresti salvare, per esempio, {vettore:121, indice:872364}.

Il discorso sugli indici è un'ottimo uovo di Colombo, non ci avevo manco pensato, ossessionato come ero dall'idea di usare puntatori tipo C. Penso proprio che utilizzerò questo sistema, che è anche semplice da implementare, grazie!

--
Comunque, al di là di ciò, a livello di teoria, esiste un modo in Java per recuperare l'indirizzo dell'oggetto in memoria e trasformarlo in un riferimento all'oggetto o è proprio impossibile?

Rikislavd
11-12-2007, 18:47
Scusate la formattazione di prima...

Grazie a tutti, comunque!:)

Angus
11-12-2007, 18:59
[FONT="Arial Black"]
Comunque, al di là di ciò, a livello di teoria, esiste un modo in Java per recuperare l'indirizzo dell'oggetto in memoria e trasformarlo in un riferimento all'oggetto o è proprio impossibile?

In Java, no.