Avatar billede jespersahner Nybegynder
14. februar 2005 - 16:17 Der er 16 kommentarer og
1 løsning

Method-overloading når argumenterne har samme type

Metoden a() kaldes på flg. måde:
a(String s1, String s2)

Jeg ønsker så at kunne anvende såvel:
  a(String s1)
som:
  a(String s2)
dvs. method-overlaoding.

Hvordan håndterer man det, når argumenterne har samme type?
Avatar billede arne_v Ekspert
14. februar 2005 - 16:20 #1
Det kan du ikke.
Avatar billede arne_v Ekspert
14. februar 2005 - 16:22 #2
Kan du ikke kalde metoderne noget forskelligt ?
Avatar billede jespersahner Nybegynder
14. februar 2005 - 16:33 #3
->arne_v: Jo, det kan jeg blive nødt til. Alternativt må man jo arbejde med:
a(String[] s)

Kunne egentlig godt tænke mig, at man havde mulighed for at skrive f.eks.
  a(s1="xx",s2="yy") el. a(s1="xx") el. a(s2="yy"),
men sådan skulle det ikke være i Java. En sådan syntaks, som man kender fra andre sprog, ville ellers give langt mere gennemskuelig kode, synes jeg, idet reference-navnene fremgår eksplicit i metode-kaldet.
Avatar billede arne_v Ekspert
14. februar 2005 - 16:42 #4
Jeg tror bestemt at jeg ville kaldse metoderne noget forskelligt.

Medmindre det er constructor, så har man ikke den mulighed.

Java har arvet meget fra C++. Og ikke så meget fra sprog der tillader
den form for kald.

Og den vil være svær at putte ind i Java, da syntaxen eksisterer, men med
anden semantik end den du efterlyser.

public class Param {
    public static void m(int a, int b) {
        System.out.println("a=" + a + " b=" + b);
    }
    public static void main(String[] arg) {
        int a,b;
        m(b=1,a=2);
    }
}

udskriver:

a=1 b=2
Avatar billede snoop_one Nybegynder
14. februar 2005 - 19:13 #5
Hvis methoderne har samme argument type så hedder det vel ikke method overloading mere ;-)

I java vil a(String s1) være den samme metode som a(String s2).

Et alternativ - hvis du vil lave method overloading, så skal du lave to af dine egne klasser der nedarver fra String klassen så kan du f.eks. have

a(String s1, String s2)
a(My1String s1)
a(My2String s2)
Avatar billede arne_v Ekspert
14. februar 2005 - 19:18 #6
Desværre er der en fra SUN som ikke synes at det er en god ide og har smidt
et final ind i String.java !
Avatar billede snoop_one Nybegynder
14. februar 2005 - 19:32 #7
ved det godt... men det kan stadig godt lade sig gøre.
Avatar billede arne_v Ekspert
14. februar 2005 - 20:05 #8
??
Avatar billede snoop_one Nybegynder
14. februar 2005 - 21:23 #9
Man kan vel bare fjerne final. Ikke den pæne måde at gøre det på... ville også selv foretrække at kalde de to metoder noget forskelligt.
Avatar billede jespersahner Nybegynder
14. februar 2005 - 22:27 #10
->arne_v: Hvad er det egentlig der sker i dit eksempel, når du kalder m(b=1,a=2)? Man får samme resultat med f.eks. m(a=1,a=2) el. m(b=1,b=2) og selvfølgelig m(1,2). Hvad er logikken heri?
Avatar billede arne_v Ekspert
14. februar 2005 - 22:29 #11
pointen er at

a=1

er en expression i C/C++/Java som returnerer værdien af det der bliver assignet
Avatar billede arne_v Ekspert
14. februar 2005 - 22:32 #12
int c = (a=1) + (b=2);

er også validt og giver c værdien 3.
Avatar billede jespersahner Nybegynder
14. februar 2005 - 22:44 #13
->arne_v: Ja, ok, jeg er vist med.

Men det har vel ikke så meget at gøre med det jeg efterlyser, eller er der noget jeg overser?
Avatar billede arne_v Ekspert
14. februar 2005 - 22:45 #14
Min pointe var at den syntax du foreslår i 14/02-2005 16:33:04 er "brugt" til noget
andet.
Avatar billede jespersahner Nybegynder
14. februar 2005 - 22:51 #15
->arne_v: Ja, det kan man sige. I fald man ville, hvad jeg efterlyser, skulle man have en selvstændig syntaks til formålet.
Avatar billede jespersahner Nybegynder
15. februar 2005 - 09:24 #16
->arne_v: Smid et svar.
Avatar billede arne_v Ekspert
15. februar 2005 - 10:14 #17
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester