To returneringer i Java?

Tags:    java

Kan man i java gøre noget ala dette?
Fold kodeboks ind/udKode 

Fold kodeboks ind/udKode 





6 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
Ikke direkte.. Men med en Pair klasse kan du
Fold kodeboks ind/udKode 


Fold kodeboks ind/udKode 




Hej Mathias,

Som Thomas skriver så understøtter Java ikke det du efterspørger.

Du kan dog simulere det på en måde.

En mulighed er den som Thomas beskriver, nemlig at anvende at Java returnerer objekter, og så kan anvende en collection af en slags, ligesom i Thomas's eksempel.

En anden mulighed er at anvende et af argumenterne som retur-argumenter. Hvis f.eks. du angiver et array som argument, kan du bruge det array som en slags "out" parameter (som f.eks. er direkte understøttet i C#).

Et eksempel:

Fold kodeboks ind/udKode 


Det er på ingen måde ligeså syntaktisk flot som det du efterspørger men det fungerer nogenlunde på samme måde.



Hmm.. Det kunne ellers være sejt hvis man kunne det.

Kan man gøre noget ala det her:
Fold kodeboks ind/udKode 


Hvor s1 og s2 så kommer til at indeholde "asdf" og "fdsa".



Nej!

Du skal være bevidst om forskellen på om du ændrer hvad selve referencen peger på eller om du ændrer det objekt som referencen peger på.

String er en reference-type, så når du sig "t1 = "asdf"" lader du referencen t1 pege på et nyt string-objekt, og s1 i main vil stadig peget på det "gamle" string-objekt.

Det du ønsker er at ændre det objekt som både s1 og t1 peger på i metoden insertText. Og det kan du med alle objekttyper. Undtagen lige string! For effektivitets grunde er string en såkaldt ikke-muterbare type, hvilket betyder at du ikke kan ændre en allerede oprettede string-objekt. Og derfor kan du ikke gøre det du ønsker.



Indlæg senest redigeret d. 09.03.2008 21:35 af Bruger #4522
Hehe... Jeg er skam ikke helt ny til Java, så jeg er udmærket klar over at det der ikke virker. Jeg ved dog også at man kan gøre nogenlunde det samme i C. (Noget med nogle pointers)

Ærgerligt at der ikke er en sej måde at gøre det på, men jeg overlever jo nok... :)



Pair klassen som er nævnt tidligere vil være den pæneste måde at gøre det men du kan også returnere et array:
Fold kodeboks ind/udKode 




t