Prendete questi due classi Java:Un modo carino per fare riferimento a due oggetti immutabili?
class User {
final Inventory inventory;
User (Inventory inv) {
inventory = inv;
}
}
class Inventory {
final User owner;
Inventory (User own) {
owner = own;
}
}
Esiste un modo without using reflection* per tirare fuori questo? In realtà non mi aspetto che lo sia, ma non può far male a chiedere.
Aggiornamento: Poiché nella costruzione bytecode ha due fasi (1. destinare oggetto, 2. chiamata del costruttore **) questo potrebbe essere (ab) usato per fare questo, con bytecode scritto a mano o un compilatore personalizzato? Sto parlando di eseguire prima il passaggio 1 per entrambi gli oggetti, poi il passaggio 2 per entrambi, usando i riferimenti del passaggio 1. Ovviamente qualcosa del genere sarebbe piuttosto ingombrante, e questa parte della domanda è accademica.
(* Perché riflessione può dare problemi con un responsabile della sicurezza)
(** dice la mia limitata conoscenza)
le dipendenze circolari non sono spesso una buona idea – Bozho
Mi dispiace, potresti approfondire un po 'il problema. Non vedo quale sia il problema, dal momento che hai già un riferimento all'altro oggetto? – Anders
@Il problema è che entrambi richiedono un riferimento all'altro in fase di costruzione e tale riferimento è disponibile solo dopo la costruzione. –