Despite the absence of first-class functions in Java, it is possible to program in the style of functional languages like ML or Haskell using the new capabilities in Java 1.5. We show how to use generic classes to program higher-order functions and how this interacts with object-oriented programming. We also show the necessity of the wildcard construct in Java and reveal several pitfalls. We conclude that the constructs in Java do not permit a functional framework that is completely compatible with object-oriented programming.