Mehrere Werte in Java-Methoden typsicher zurückgeben

Benjamins Blog

  • Blog
  • Themen
  • Fotografie
  • Sneaker
  • Kontakt
  • Impressum
-31-
12
2009

Mehrere Werte in Java-Methoden typsicher zurückgeben

Anders als manch andere imperative Programmiersprachen, unterstützt Java nur die Rückgabe eines Wertes bei einem Methodenaufruf. Jedoch ist es häufig interessant, mehrere Werte zurückzugeben. Grundsätzlich lassen sich hier zwei Szenarien unterscheiden. Bei der Rückgabe von mehreren gleichartigen Typen wird meist eine Klasse des Collections-Frameworks verwendet, wie zum Beispiel List oder ein Array. Manchmal will man aber auch völlig verschiedene Typen gemeinsam zurückgeben. Gängige Praxis ist es hier, ein Object-Array zurückzugeben und dann quasi beim Implementieren festzulegen, von welchem Typ die einzelnen Werte sind und entsprechen zurückzucasten. Dies ist leider weder typsicher, noch lässt sich die vorherige Festlegung im Code erzwingen. Abhilfe schafft hier eine generische Holder-Klasse, die einzelnen Werte typsicher kapselt und als einziger Rückgabewert verwendet werden kann.

Hier ein Beispiel für die Rückgabe über ein Object-Array:
private Object[] doItUnchecked()
{
	String s = "foo";
	Date d = new Date();

	return new Object[] { s, d };
}


Aufruf:
// unchecked variant: dangerous!
Object[] returnValues = t.doItUnchecked();
String s = (String) returnValues[0];
Date d = (Date) returnValues[1];


Eine generische Holderklasse (hier: immutable):
/**
 * Immutable holder type for two values.
 * 
 * @author Benjamin Erb
 *
 * @param <F> type of first value
 * @param <S> type of second value
 */
public class PairHolder<F, S>
{
	private final F first;
	private final S second;
	
	public PairHolder(F first, S second)
	{
		this.first = first;
		this.second = second;
	}
	
	public F getFirst()
	{
		return first;
	}
	
	public S getSecond()
	{
		return second;
	}
}


Verwendung in Methode:
private PairHolder<String, Date> doItChecked()
{
	String s = "foo";
	Date d = new Date();

	return new PairHolder<String, Date>(s, d);
}


Aufruf:
// check variant: safe already at compile-time
PairHolder<String, Date> h = t.doItChecked();
String s = h.getFirst();
Date d = h.getSecond();


Die Holderklasse lässt sich auch noch beliebig erweitern, um Tripel, Quadrupel etc. zu halten. Wer für 2-Tupel keine eigene Klasse implementieren möchte, kann übrigens auf AbstractMap.SimpleEntry<K,V> oder AbstractMap.SimpleImmutableEntry<K,V> zurückgreifen.
Geschrieben von Benjamin Erb am 31.12.2009 in Programmierung Kommentare: (0) Trackbacks: (0)
Tags für diesen Artikel: coding, java
Artikel mit ähnlichen Themen:
Kurzpräsentation – Node.js
LRU-Cache in Java
diretto
Twitterbot in Perl
Semantic Mashup
SequentialMessageQueues in Java
Schnelle Quellcode-Navigation in Eclipse
IOException.de
Mit Working Sets Eclipse aufräumen
Skript: Java Grundlagen

Trackbacks
Trackback für spezifische URI dieses Eintrags

Keine Trackbacks

Kommentare
Ansicht der Kommentare: (Linear | Verschachtelt)

Noch keine Kommentare


Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss um dieses Verfahren anzuwenden.
CAPTCHA

 
 

Über den Autor

Benjamin Erb Benjamin Erb ist 24 Jahre alt und studiert an der Universität Ulm Medieninformatik.

Aktuelle Projekte

  • diretto.org
  • IOException.de

Quicklinks

  • Meine Amazon-Wishlist
  • Mein PGP-Schlüßel
  • twitter.com/b_erb
  • facebook.com/benjamin.erb

Blogroll

  • Davids Blog
  • Flos Warteschleife
  • stk bloggt.es
  • guido.demelo.de
  • Sina paints her life
  • Malte Wittkugel.net
  • Marcus bloggt.es
  • claus bloggt.es
  • floBLOG
  • Basti in Japan
  • Sven in Frankreich

Sneaker-Blogroll

  • tomat3.de
  • sneakerb0b.de
  • vEnoMaZn
  • sneakerized.com
  • welovesneaker.com

Kalender

Zurück September '10
Mo Di Mi Do Fr Sa So
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

Getaggte Artikel

acm aesthetic computing animation apache blog bücher c++ ccc coding context free data visualization datenschutz dd-wrt design design pattern diretto eclipse fachschaft fail fotos fun gadget gdg handy hardware hip-hop homepage imaging informatik information design italien java javascript joggen kiosk system laptop latein latex mail mathematik mozilla musik mysql netbook nike af1 nike air max nmap perl pgp php politik postgresql privacy processing progwerkstatt psychologie ravensburg rivoli rutenfest s9y samsung q25 sneaker sneaker photography software sopra spanien sport sql studium studivz svn tagato trac trainingscamp typografie ubiquitous computing ubuntu ulm usability user interfaces videos virtualisierung vnc web web 2.0 welfen wikipedia wishlist xslt zivildienst

Archive

September 2010
August 2010
Juli 2010
Das Neueste ...
Älteres ...

Kategorien

  • XML Allgemeines (33)
  • XML Fotos (33)
  • XML Homepage (6)
  • XML Italien (7)
  • XML Lustiges (25)
  • XML Musik (11)
  • XML Nachdenkliches (9)
  • XML Schuhe (24)
  • XML Sonstiges (3)
  • XML Sport (5)
  • XML Videos (2)
  • XML Design (18)
  • XML IT (20)
  • XML Hardware (16)
  • XML Open-Source (7)
  • XML Programmierung (41)
  • XML Studium (61)
  • XML Web (30)
  • XML Datenschutz (6)
  • XML Usability (13)

Alle Kategorien

Feeds

XML RSS 2.0 feed
ATOM/XML ATOM 1.0 feed
XML OPML 1.0 feed

Statistiken

Letzter Artikel: 01.06.2010 16:01
242 Artikel wurden geschrieben
123 Kommentare wurden abgegeben

Verwaltung des Blogs

Login
 

© 2002 - 2010 Benjamin Erb