05. januar 2004 - 17:45Der er
5 kommentarer og 1 løsning
RMI hvordan fungerer det
HEj er der nogen der ved hvordan RMI paser sine objekter. Gøres det som pass by referene, copy eller value. Eller gøres det ud fra forskellige situationer.
Og hvad er det nu lige almindelige java går. Er det pass by reference ?
Java benytter pass by value. Har ikke hørt om pass by copy, tror du forveksler den med pass by value!
F.eks.:
class Point { int x; int y; }
public void swapXY(Point p){ int tmp = p.y; p.y = p.x; p.x = p.y }
Når ovenstående metode returnerer er Point p blevet opdateret, idet p er en reference til et Point, MEN
public void swapPoints(Point p1, Point2) { Point tmp = p2; p2 = p1; p1 = p2; }
har ingen effekt på p1 og p2 når metoden er returneret, idet p1 og p2 er kopier af referencerne der medgives som argumenter!
Uden at gøre mig til ekspert på rmi, mener jeg at der gælder følgende:
For at rmi kan returner et objekt, kræves at det er enten remote eller serializable. I første tilfælde får du en reference til en proxy for objektet, i andet tilfælde får du en kopi af den transitive lukning af objektets tilstand. Transitive lukning vil sige at vi også får tilstanden af alle objekter der refereres fra objektet, samt deres transitive lukning...
"pass by copy" må være det samme som "pass by value"
simple data typer er i Java altid "pass by value"
objekter er lidt mere grumset - set fra en Java compiler teknisk synsvinkel er de også "pass by value", men: - kald med object og "pass by value" i C++ har en hel anden betydning - java objekter er altid referancer og det kommer derved til at ligne C++ "by reference" lidt i semantik så der er ihvertfald nogen som derfor foretrækker termen "pass reference by value".
Kald af en RMI stub er et normalt kald ligesom alle andre men objektet klones mellem stub og skeleton.
Det giver følgende opførsel:
normal kald RMI kald ændring af simple data typer - - ændring af referencer til objekter - - ændring af objekter + -
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.