1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

... in Parameterliste?

  • ComSubVie
  • 12. März 2006 um 22:34
  • Unerledigt
  • ComSubVie
    5
    ComSubVie
    Mitglied
    Punkte
    230
    Beiträge
    42
    • 12. März 2006 um 22:34
    • #1

    Ich habe gerade den Buchauszug Crafting Java with Test-Driven Development, Part 6: Refactoring Tests gelesen, dabei ist mir ein seltsamer Parameter aufgefallen:

    Code
    private void assertPlayers(String... expected) {/**/}

    Zuerst dachte ich das das "..." ein Platzhalter ist, aber warum sollte man nur
    für einen Array-Of-String (stimmt nicht ganz) das nicht gleich so angeben?Also ran an den Editor erster Wahl (vim) und reinklopfen. Überraschung, der Code funktioniert wirklich!!!

    Hier mein kompletter Testcode - nur dafür wesentliche Auszüge aus dem obigen Artikel - nur um zu testen ob das überhaupt funzt, falls es wen interessieren sollte:

    Java
    import java.util.*;
    
    
    public class JavaTest {
      public static final int CAPACITY = 10;
      private List<String> players = new ArrayList<String>();
    
    
      public static void main( String [] args ) {
        JavaTest jt = new JavaTest();
        jt.testAddMultiplePlayers();
      }
    
    
      public void add( String player ) {
        players.add( player );
      }
    
    
      public List<String> players() {
        return players;
      }
    
    
      public void testAddMultiplePlayers() {
        for (int i = 0; i < JavaTest.CAPACITY; i++)
          this.add("" + i);
        assertPlayers("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
      }
    
    
      private void assertPlayers(String... expected) {
        System.out.println( "Expected: " + expected.length + ", Got: " +  this.players().size()) ;
        int i = 0;
        for (String player: this.players())
          System.out.println( "Player: Expected: " + expected[i++] + ", Got: " + player);
      }
    }
    Alles anzeigen

    Kann mir da mal wer erklären, was da genau passiert? Funktioniert das nur mit Generics? Ich gehe mal davon aus, das das eine Java5-Erfindung ist.

  • Paulchen
    1
    Paulchen
    Gast
    • 12. März 2006 um 22:40
    • #2
    Zitat von ComSubVie

    Kann mir da mal wer erklären, was da genau passiert? Funktioniert das nur mit Generics? Ich gehe mal davon aus, das das eine Java5-Erfindung ist.

    mit generics hat das nichts zu tun, ist aber sehr wohl eine erfindung von JDK 5.0. die drei punkte geben an, dass hier entweder ein array übergeben werden kann oder eine reihe von argumenten gleichen typs: du kannst also schreiben:

    Code
    assertPlayers("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");

    oder

    Code
    assertPlayers(new String[] {"0","1","2","3","4","5","6","7","8","9"});

    was geschrieben wird, ist für den code in der methode assertPlayers unerheblich.

    siehe auch http://java.sun.com/j2se/1.5.0/doc…ge/varargs.html

  • ComSubVie
    5
    ComSubVie
    Mitglied
    Punkte
    230
    Beiträge
    42
    • 12. März 2006 um 22:45
    • #3

    alles klar, wunderbar, danke! man lernt nie aus :winking_face:

    Zitat von Paulchen

    siehe auch http://java.sun.com/j2se/1.5.0/doc…ge/varargs.html


    irgendwie hab ich das nicht gefunden - mir sind aber auch keine sinnvollen suchen für "..." eingefallen :winking_face:

  • Paulchen
    1
    Paulchen
    Gast
    • 12. März 2006 um 23:55
    • #4
    Zitat von ComSubVie

    alles klar, wunderbar, danke! man lernt nie aus :winking_face:


    irgendwie hab ich das nicht gefunden - mir sind aber auch keine sinnvollen suchen für "..." eingefallen :winking_face:

    hm... vielleicht "java 5 what's new"? :grinning_squinting_face:

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 13. März 2006 um 10:47
    • #5

    *würg* Jetzt hat Java schon so viel Schlechtes von C übernommen, dass ich nur mehr auf echte Zeiger (+Arithmetik) in JDK 7.0 warte. Wer will printf in einer objektorientierten Sprache?

    Dipper dipper dii dipper dii dipper dii duuu

  • ComSubVie
    5
    ComSubVie
    Mitglied
    Punkte
    230
    Beiträge
    42
    • 13. März 2006 um 14:49
    • #6

    Was spricht gegen printf in einer objektorientierten Sprache?
    Ich warte übrigens auch auf Zeiger in Java - das wird Zeit das endlich wieder jemand auf die praktischen Features von C aufmerksam wird...

  • Spockman
    5
    Spockman
    Mitglied
    Punkte
    210
    Beiträge
    41
    • 13. März 2006 um 15:43
    • #7
    Zitat von ComSubVie

    Was spricht gegen printf

    printf ist nicht (statisch) typsicher. Objektorientierung hat damit nichts zu tun.

  • Irrlicht
    7
    Irrlicht
    Mitglied
    Reaktionen
    1
    Punkte
    421
    Beiträge
    82
    • 13. März 2006 um 19:06
    • #8
    Zitat von sauzachn

    Wer will printf in einer objektorientierten Sprache?

    Dagegen spricht nun wirklich nichts. Gegen eine Methode, die eine Reihe von Objekten akzeptiert, die alle ihren Content als String ausgeben können ist doch nichts einzuwenden. C macht es halt gezwungenermaßen recht gefählich. C# z.b. aber wirklich nett, und sicher sowieso.

    das irrlicht

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung