This Is Not Your Father's Java

Preview:

DESCRIPTION

A presentation about creative API Design and language feature emulation with Java

Citation preview

This is not your father’s JavaSven Efftinge - itemis

5 Missing FeaturesCollection LiteralsObject LiteralsClosuresPropertiesMultiline Strings

Collection Literals

List<String> names = new ArrayList<String>();names.add(“foo”);names.add(“bar”);names.add(“baz”);

Collection Literals

List<String> names = new ArrayList<>();names.add(“foo”);names.add(“bar”);names.add(“baz”);

Collection Literals

newArrayList(“foo”, “bar”, “baz”)

Static imports, generified method and var-args!

Do you already use Google Guava?

Object Literals

Readable data constructionJava Devs usually flee to some external format, such as XML or JSON.

Object Literals

Person p = new Person();p.setFirstName("Hans");p.setLastName("Albers");Address address = new Address();address.setStreet("Am Germaniahafen 1");address.setCity("Kiel");p.setAddress(address);

Java enforces imperative style.

Object LiteralsPerson p = new Person() {{ firstName = "Hans"; lastName = "Albers"; address = new Address() {{ street = "Am Germaniahafen 1"; city = "Kiel"; }};}};

Object LiteralsPerson p = new Person() {{ firstName = "Hans"; lastName = "Albers"; address = new Address() {{ street = "Am Germaniahafen 1"; city = "Kiel"; }};}};

anonymous classes

Object LiteralsPerson p = new Person() {{ firstName = "Hans"; lastName = "Albers"; address = new Address() {{ street = "Am Germaniahafen 1"; city = "Kiel"; }};}};

Initializer

No Closures

List<Person> myFriends = ...StringBuilder sb = new StringBuilder();for (Person person : myFriends) { sb.append(person.getName()) .append(“, “);}String result = sb.toString().substring(0, sb.length()-2);

My friends’ names in a comma separated string.

How about this?

List<Person> myFriends = ...

String names = joinFrom(myFriends).getName();

generics and proxies!

LambdaJ - http://code.google.com/p/lambdaj/

Closures in Java 8

List<Person> myFriends = ...

List<String> names = myFriends .map(#{ p -> p.getName(); });

Properties

class Person { public String firstName;}

Person p = ....p.firstName = “Horst”;

Properties

class Person { public String firstName; public void setFirstName(String s) { firstName = process(s); }}

Person p = ....p.firstName = “Horst”;

Byte code manipulation during class loading!

Multiline Stringspublic static void main(String[] args) { System.out.println($(/* Wow, we finally have multiline strings in Java! HOOO! */));}

Source code & stack trace information

Beyond Java

Other JVM-LanguagesEclipse Xtend

DSLsEclipse Xtext 2.