Upload
sven-efftinge
View
1.353
Download
3
Tags:
Embed Size (px)
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.