17
This is not your father’s Java Sven Efftinge - itemis

This Is Not Your Father's Java

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: This Is Not Your Father's Java

This is not your father’s JavaSven Efftinge - itemis

Page 2: This Is Not Your Father's Java

5 Missing FeaturesCollection LiteralsObject LiteralsClosuresPropertiesMultiline Strings

Page 3: This Is Not Your Father's Java

Collection Literals

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

Page 4: This Is Not Your Father's Java

Collection Literals

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

Page 5: This Is Not Your Father's Java

Collection Literals

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

Static imports, generified method and var-args!

Do you already use Google Guava?

Page 6: This Is Not Your Father's Java

Object Literals

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

Page 7: This Is Not Your Father's Java

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.

Page 8: This Is Not Your Father's Java

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

Page 9: This Is Not Your Father's Java

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

anonymous classes

Page 10: This Is Not Your Father's Java

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

Initializer

Page 11: This Is Not Your Father's Java

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.

Page 12: This Is Not Your Father's Java

How about this?

List<Person> myFriends = ...

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

generics and proxies!

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

Page 13: This Is Not Your Father's Java

Closures in Java 8

List<Person> myFriends = ...

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

Page 14: This Is Not Your Father's Java

Properties

class Person { public String firstName;}

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

Page 15: This Is Not Your Father's Java

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!

Page 16: This Is Not Your Father's Java

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

Source code & stack trace information

Page 17: This Is Not Your Father's Java

Beyond Java

Other JVM-LanguagesEclipse Xtend

DSLsEclipse Xtext 2.