| 
    
    Archive: 
 Subtopics: 
 Comments disabled | Thu, 14 May 2009 
Product types in Java
 
 
        class Persons2 {
          Person personA, personB;
          Persons2(Person a, Person b) {
            personA = a; personB = b;
          }
          Person getPersonA() { return personA; }
          ...
        }
Java is loathsome in its verbosity, and this sort of monkey code is
Java's verbosity at its most loathsome.  So I did not do this.Haskell functions return only one value also, but this is no limitation, because Haskell has product types. And starting in Java 5, the Java type system is a sort of dented, bolted-on version of the type systems that eventually evolved into the Haskell type system. But product types are pretty simple. I can make a generic product type in Java: 
 
        class Pair<A,B> {
          A a;  B b;
          Pair(A a, B b) { this.a = a; this.b = b; }
          A fst() { return a; }
          B snd() { return b; }
        }
Then I can declare my function to return a
Pair<Person,Person>:
 
        Pair<Person,Person> findMatch() {
          ...
          return new PairOkay, that worked just fine.  The
boilerplate is still there, but you only have to do it once.  This
trick seems sufficiently useful that I can imagine that I will use it
again, and that someone else reading this will want to use it too.I've been saying for a while that up through version 1.4, Java was a throwback to the languages of the 1970s, but that with the introduction of generics in Java 5, it took a giant step forward into the 1980s. I think this is a point of evidence in favor of that claim. I wonder why this class isn't in the standard library. I was not the first person to think of doing this; web search turns up several others, who also wonder why this class isn't in the standard library. I wrote a long, irrelevant coda regarding my use of the identifiers husband and wife in the example, but, contrary to my usual practice, I will publish it another day. [ Addendum 20090517: Here's the long, irrelevant coda. ] 
 I gratefully acknowledge the gift of Petr Kiryakov. Thank you! 
 [Other articles in category /prog/java] permanent link |