[JAVA] objecten toewijzen

Pagina: 1
Acties:

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
Een vriend van mij heeft de volgende vraag.
Hoe kan ik een object de waarde geven van een ander object?
met int's gaat het heel simpel:
code:
1
2
int a = 3;
int b = a;

maar:
code:
1
2
Object a = (Object) b;
//b hoeft niet ge'cast te worden, want is al een object.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Wat is "de waarde geven"...

Dit kan je op 3 manieren opvatten:

(1) Een als je een assigment doet van een Object naar een variabele gaat de variabele naar dat Object wijzen. Als de variabele eerst naar een ander Object wees en geen enkele andere variabele wijst meer naar dat Object, dan is het oude Object 'weg' en zal het opgepikt worden door garbarge collecter.

(2) Als je een Object cloned en deze kloon toewijst aan een variabele, gaat de variabele wijzen naar deze kloon. De kloon is tot op zeker hoogte gelijk aan het oude Object, maar het is wel een ander Object: als je iets wijzigt in de kloon, wijzigt dit niet in het origineel. Bij de eerste assignment is dit dus wel het geval. Ook hier geldt dat een oud Object eventueel onbereikaar wordt en opgepikt zal worden door de garbage collector.

(3)Als je een Object A hebt en een Object B en je wilt dat Object A hetzelfde wordt als Object B, maar dat Object A wel Object A 'blijft'. Dan zal je dit zelf moeten implementeren in een methode in de klasse van A. Deze krijgt dan een andere instantie mee, wat dus Object B wordt.


Vaak wil je of klonen, of gewoon een variabele naar hetzelfde Object laten wijzen... geval 3 heeft eigenlijk niet zoveel nut, behalve als je zuinig met objecten om wilt gaan of iets dergelijks.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

Op woensdag 19 december 2001 23:42 schreef mbravenboer de perfecte uitleg maar zonder voorbeelden
offtopic:
martin, die link naar Java Generics, mag ik vragen wat dat precies inhoudt? Niet dat ik niet memberke wil worden bij de Java Connection, maar wat voor onderwerp behandelt die link, of is het gewoon een link naar de Connection?

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
limoentje: martin, die link naar Java Generics, mag ik vragen wat dat precies inhoudt?
Uiteraard :) .

In de volgende Java 2 SDK zal de taal Java voor het eerst sinds de toevoeging van inner-classes echt veranderd worden. Er zal namelijk support komen voor geparameterizeerde typen, die je kunt vergelijken met C++ templates, maar toch anders zijn.

De link verwijst naar een behoorlijk goed functionerend prototype van deze compiler. De gegenereerde code draait in elke JVM. De compiler is gelijk aan de compiler in 1.4.0, maar dan in deze zit dus support voor geparameterizeerde typen.

Met geparameterizeerde typen kan je een klasse parameterizeren met een type. Het meest zul je dit toepassen bij Collections. Je kunt een List bijvoorbeeld parameterizeren met een String om een lijst van String te krijgen.

Je gebruikt die dan zo:
code:
1
2
3
4
5
List<String> list = new ArrayList<String>();

list.add("Bla");

String elem = list.get(0)

Je hoeft nu dus niet meer te casten :) .

Een simpel voorbeeld van een eigen klasse die je zou kunnen schrijven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Pair<A, B>
{
   private A first;
   private B second;

   public Pair(A first, B second)
   {
    super();
    this.first = first;
    this.second = second;
   }

   public A getFirst()
   {
    return first;
   }

   public B getSecond()
   {
    return second;
   }
}

Deze kan je nu zo gebruiken (zomaar wat fragmentjes):
code:
1
2
3
4
5
6
7
8
public void doSomething(Pair<String, Integer> pair);

Pair<Calendar, DateFormat> pair = ...

Calendar calendar = pair.getFirst();

Pair<List<String>, List<Integer>>
Pair<Integer, Integer>
Niet dat ik memberke wil worden bij de Java Connection, maar wat voor onderwerp behandelt die link, of is het gewoon een link naar de Connection?
Je moet je aanmelden voor de Developer Connection als je Early-Access software wil downloaden. Verder is absoluut niet boeiend of je lid bent of niet :) .

edit: foutje in de code ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
PS: Ik gebruik deze compiler al voor al mijn werk. Hij functioneert dus uitstekend. Ik cast nooit meer :9 .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

kijk, hier herkennen we de echte tweakers en specifieker de echte javahova's :)

:* voor deze uitleg!

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
limoentje: :* voor deze uitleg!
Graag gedaan :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1