[JAVA] Verschillende types returnen in array

Pagina: 1
Acties:

  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06-2025
Hallo,

Ik zit al een tijdje te zoeken op volgende probleem:

Ik heb een object met enkele eigenschappen (een paar doubles, Strings, Color). Om die eigenschappen te verkrijgen wou ik een accessor maken die gewoon een array retourneert met deze waarden. Het probleem is echter dat een array bv double[] of String[] is maar niet een combinatie.

heeft iemand een idee hoe dit op te lossen valt, of is het beter om voor de verschillende types verschillende accessormethodes te schrijven?

Thanks.

  • Fuzzillogic
  • Registratie: November 2001
  • Laatst online: 01-07-2025
Waarom gebruik je dan geen andere container? Vectors, maps, stacks of zelfs een array-object?

  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 16-02 22:21

Swaptor

Java Apprentice

*ranzig*

Object[], maar dan moet je wel weten wat het was voordat je het weer kunt accessen.

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
Swaptor schreef op maandag 08 mei 2006 @ 19:54:
*ranzig*

Object[], maar dan moet je wel weten wat het was voordat je het weer kunt accessen.
of je gebruikt calls by reference.. dat is stukken neter imho

edit: of kon dat nou weer niet in java *twijfelt*

[ Voor 13% gewijzigd door BasieP op 08-05-2006 20:03 ]

This message was sent on 100% recyclable electrons.


  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06-2025
thanks voor de snelle reacties! Object[] is dan mss niet de "mooiste" oplossing, maar ik zal dat gebruiken.

Thanks again!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
webinn schreef op maandag 08 mei 2006 @ 20:15:
thanks voor de snelle reacties! Object[] is dan mss niet de "mooiste" oplossing, maar ik zal dat gebruiken.

Thanks again!
in object kan maar 1 object (duh) als je een vector neemt kan je er meerdere van verschillende typen in doen.
om je 'object' eerst te casten naar een andere container is ook vrij nutteloos

This message was sent on 100% recyclable electrons.


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
[] = array = 0 tot oneindig

Het blijft ranzig, je hebt al een object, maak gewoon getters en setters voor de attributen of geef het object zelf door.

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:25

Robtimus

me Robtimus no like you

Er is weinig verschil in deze context tussen een Vector (List) of een Object[] (array met Objects). Een Object[] heeft een vaste grootte, maar dat maakt hier niets uit.

Verder zou ik gewoon voor verschillende accessors (getters) gaan. Niet alleen is dit netter, maar je weet ook van elke getter wat de return-waarde zal zijn. Je hoeft dus niet te gaan casten (na een eventuele type-check). Bovendien: wat als je nou maar 1 property nodig hebt? Met de Object[] methode zit je wel meteen alles op te vragen.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:25

Robtimus

me Robtimus no like you

Gert schreef op maandag 08 mei 2006 @ 20:20:
...of geef het object zelf door.
En hoe wil je daar dan de eigenschappen van opvragen? ;)
Maar je hebt gelijk, gewoon verschillende getters / setters gebruiken.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 14-02 22:37
IceManX schreef op maandag 08 mei 2006 @ 20:22:
[...]
En hoe wil je daar dan de eigenschappen van opvragen? ;)
Maar je hebt gelijk, gewoon verschillende getters / setters gebruiken.
De eigenschappen public zetten natuurlijk :*)

Maar ff serieus, gewoon het advies van de rest volgen en getters/setters maken voor de eigenschappen.

@Japie_17: haha, net te laat :>

[ Voor 21% gewijzigd door The Fox NL op 08-05-2006 20:29 ]


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 18:46
IceManX schreef op maandag 08 mei 2006 @ 20:22:
[...]
En hoe wil je daar dan de eigenschappen van opvragen? ;)
Al je properties public maken :P.
Maar je hebt gelijk, gewoon verschillende getters / setters gebruiken.
Inderdaad. :)

Maarre... Wat voor redenatie zit er eigenlijk achter alle properties in één keer opvragen? Ik zie de logica er niet echt van in. :?
The Fox NL schreef op maandag 08 mei 2006 @ 20:27:
[...]


De eigenschappen public zetten natuurlijk :*)
:X Mag ik ook eens een opmerking maken :>.

[ Voor 20% gewijzigd door Jaap-Jan op 08-05-2006 20:28 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:25

Robtimus

me Robtimus no like you

The Fox NL schreef op maandag 08 mei 2006 @ 20:27:
[...]

De eigenschappen public zetten natuurlijk :*)
Do that and I'll hunt you down and kill you slowly })

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Hmm, het public zetten is ook een van mijn favorieten... Mischien komt dat omdat ik electronicus ben...

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 18:46
Verwijderd schreef op maandag 08 mei 2006 @ 23:15:
Hmm, het public zetten is ook een van mijn favorieten... Mischien komt dat omdat ik electronicus ben...
Die zijn te lui om een paar accessors te typen? :Y).

Ben ik blij dat ik TI doe, leer je tenminste behoorlijk programmeren :P.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Verwijderd

Japie_17 schreef op maandag 08 mei 2006 @ 23:18:
[...]

Die zijn te lui om een paar accessors te typen? :Y).

Ben ik blij dat ik TI doe, leer je tenminste behoorlijk programmeren :P.
Ja, die zien het nut er niet echt van in om dat te doen... Wij zijn meer bezig met de "belangrijke" zaken in het leven, en het programeren is een bijzaak :+

(Nu begeef ik me op glad ijs... 8))

FF serieus, kan er eigenlijk is echt een goede reden geven om in een klein programma geen publieke/globale vars te gebruiken? (zowel OO/niet OO) De docenten zeggen: da mag ni, punt. Maar waarom juist?

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 18:32
Japie_17 schreef op maandag 08 mei 2006 @ 23:18:
[...]
Die zijn te lui om een paar accessors te typen? :Y).

Ben ik blij dat ik TI doe, leer je tenminste behoorlijk programmeren :P.
Accessors typen? Ben je gek geworden! Die laat je toch gewoon genereren?

Roomba E5 te koop


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Getters en setters vormen een abstracte laag tussen design en implementatie. Je kan met interfaces je hele applicatie in elkaar klussen zonder dat er ook maar één attribuut daadwerkelijk aanwezig is.

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Ik zou een HashMap gebruiken. In de key geef je dan de naam/type object aan en in de value stop je de waarden/arrays.

[ Voor 6% gewijzigd door BalusC op 09-05-2006 08:41 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Prachtige adviezen allemaal, maar ...
webinn schreef op maandag 08 mei 2006 @ 19:49:
of is het beter om voor de verschillende types verschillende accessormethodes te schrijven?
Ja.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
BalusC schreef op dinsdag 09 mei 2006 @ 08:29:
Ik zou een HashMap gebruiken. In de key geef je dan de naam/type object aan en in de value stop je de waarden/arrays.
Als je van te voren niet weet welke properties er zijn ( Wat ik hier dus vermoed ) zou ik dat idd ook doen. Je houdt natuurlijk nog steeds het probleem dat je uit een HashMap ook maar een type terug kunt krijgen en dus nog steeds zult moeten Casten.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • reddog33hummer
  • Registratie: Oktober 2001
  • Laatst online: 07-02 17:13

reddog33hummer

Dat schept mogelijkheden

webinn schreef op maandag 08 mei 2006 @ 19:49:
Ik heb een object met enkele eigenschappen (een paar doubles, Strings, Color). Om die eigenschappen te verkrijgen wou ik een accessor maken die gewoon een array retourneert met deze waarden. Het probleem is echter dat een array bv double[] of String[] is maar niet een combinatie.

heeft iemand een idee hoe dit op te lossen valt, of is het beter om voor de verschillende types verschillende accessormethodes te schrijven?
Je zou dit ook met reflectie kunnen doen

Backup not found (R)etry (A)bort (P)anic<br\>AMD 3400+ 64, 2 GB DDR, 1,5 TB Raid5


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

rwb schreef op dinsdag 09 mei 2006 @ 09:04:
[...]

Als je van te voren niet weet welke properties er zijn ( Wat ik hier dus vermoed ) zou ik dat idd ook doen. Je houdt natuurlijk nog steeds het probleem dat je uit een HashMap ook maar een type terug kunt krijgen en dus nog steeds zult moeten Casten.
Casten is geen punt als je weet om welk object het gaat door de type in de key te vermelden (in de variabelenaam te verwerken).

Neemt overigens niet weg dat 1 accessor per eigenschap veel netter is.

[ Voor 12% gewijzigd door BalusC op 09-05-2006 09:06 ]


  • sirono
  • Registratie: November 2002
  • Laatst online: 07-08-2025
of doe het nog leuker:

object[][] objarray = new object[x][2];

en die vul je vervolgens door bijv:

objarray[0][0] = "string";
objarray[0][1] = sWaardeDieJeOpWiltSlaan;

en in je aanroepende functie lees je het eerste veld uit omdat je weet dat dat altijd strings zijn.

if (((string)returnedarray[0][0]).equeals("string"))
{
doe iets met je string
}

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 18:32
sirono schreef op dinsdag 09 mei 2006 @ 09:11:
of doe het nog leuker:

object[][] objarray = new object[x][2];

en die vul je vervolgens door bijv:

objarray[0][0] = "string";
objarray[0][1] = sWaardeDieJeOpWiltSlaan;

en in je aanroepende functie lees je het eerste veld uit omdat je weet dat dat altijd strings zijn.

if (((string)returnedarray[0][0]).equeals("string"))
{
doe iets met je string
}
Hetzelfde idee als de hashmap dus, alleen dan NOG brakker.

Roomba E5 te koop


Verwijderd

Maarruh, wat is eigenlijk het grote plaatje wat bij dit vraagstuk hoort. De oplossingen lopen nu behoorlijk uiteen omdat eigenlijk niemand een idee heeft wat je nou echt wilt bereiken. Dus vertel eens waarom je dit nodig hebt :)

  • DaCoTa
  • Registratie: April 2002
  • Nu online
Hier is een titelchange naar '[JAVA] Alle brakke manieren om return values terug te geven' wel op zijn plek zeg. :) Getters/Setters is toch de enige redelijke manier als het code van enigsinds formaat is. Voor een 10 regelproject maak ik ze ook niet, maar dan beperk ik me toch echt tot publics ipv alles in anonieme mappen of arrays te gooien.

Een array heeft toch echt een typing, dat is niet voor niks, dat betekend dat er een variabel aantal dingen van 1 type in moeten. En alle andere zaken uit collections tegenwoordig ook, als je classes gaat mixen in een collection klopt er gewoon iets niet in je oplossing. (Behalve als ze tot eenzelfde supertype behoren.)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:22

Janoz

Moderator Devschuur®

!litemod

Elke fatsoenlijke IDE heeft automatische generatie van getters en setters. Het 'extra werk' argument slaat daarom ook nergens op. Zelfs voor de '10 regelige projectjes' gebruik ik ze nog (alhoewel ik me afvraag of je in 10 regels uberhaupt wel overzichtelijk 2 classes kunt schrijven :D )

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1