SlideShare ist ein Scribd-Unternehmen logo
1 von 133
Getting the most out of
          Java
    Sebastian Zarnekow - Sven Efftinge
                  itemis
Topics
Topics
Construction of Data Objects
Topics
Construction of Data Objects
   Dependency Injection
Topics
Construction of Data Objects
   Dependency Injection
      Fluent Interfaces
Topics
Construction of Data Objects
   Dependency Injection
      Fluent Interfaces
   Polymorphic Dispatch
Topics
Construction of Data Objects
   Dependency Injection
      Fluent Interfaces
   Polymorphic Dispatch
   Annotation-based APIs
Java is getting old
Java is Ceremonial
Java is Ceremonial


public String greeting(final String name) {
  return "Hello "+name+"!";
}
Java is Ceremonial
Public visibility should be default


public String greeting(final String name) {
  return "Hello "+name+"!";
}
Java is Ceremonial


public String greeting(final String name) {
  return "Hello "+name+"!";
}
Java is Ceremonial
Local variables and arguments should
          be final by default

 public String greeting(final String name) {
   return "Hello "+name+"!";
 }
Java is Ceremonial


public String greeting(final String name) {
  return "Hello "+name+"!";
}
Java is Ceremonial
  Return type can be inferred


public String greeting(final String name) {
  return "Hello "+name+"!";
}
Java is Ceremonial


public String greeting(final String name) {
  return "Hello "+name+"!";
}
Java is Ceremonial


public String greeting(final String name) :
  return "Hello "+name+"!";
}
Java is Ceremonial

public String greeting(final String name) {
  return "Hello "+name+"!";
}

greeting(String name) :
  "Hello "+name+"!";
Java’s Syntax is Inflexible
Java’s Syntax is Inflexible
All infix operators work for built-in types only.
Java’s Syntax is Inflexible
All infix operators work for built-in types only.


                2 / 4 * 13;
Java’s Syntax is Inflexible
All infix operators work for built-in types only.


                2 / 4 * 13;

      new BigDecimal(2)
        .divide(new BigDecimal(4))
        .multiply(new BigDecimal(13));
Java lacks Closures
Java lacks Closures
    Working with collections in Java (i.e. without closures):
	   public List<String> fourLetterWords(List<String> words) {
	   	 List<String> fourLetterWords = Lists.newArrayList();
	   	 for (String string : words) {
	   	 	 if (string.length()==4)
	   	 	 	 fourLetterWords.add(string);
	   	 }
	   	 return fourLetterWords;
	   }
Java lacks Closures
  Working with collections in Java (i.e. with closures):



	 public List<String> fourLetterWords(List<String> words) {
	 	 return words.select(#{s->s.length()==4});
	 }
...but Java is also great!
...but Java is also great!
•Lots of developers
...but Java is also great!
•Lots of developers
•JVM is a great platform
...but Java is also great!
•Lots of developers
•JVM is a great platform
•Big open-source community
...but Java is also great!
•Lots of developers
•JVM is a great platform
•Big open-source community
•Leading edge tooling
 (Eclipse, IntelliJ IDEA)
What can we do about the
  “not-so-nice things”
        in Java?
Object Instantiation
Object Categories
Object Categories
•   Short Living, Data Objects
Object Categories
•   Short Living, Data Objects
    •   Collections (ArrayList, HashSet, Iterator)
Object Categories
•   Short Living, Data Objects
    •   Collections (ArrayList, HashSet, Iterator)
    •   Immutable Objects (BigInteger, String)
Object Categories
•   Short Living, Data Objects
    •   Collections (ArrayList, HashSet, Iterator)
    •   Immutable Objects (BigInteger, String)
    •   Others (LayoutManager, Runnables)
Object Categories
•   Short Living, Data Objects
    •   Collections (ArrayList, HashSet, Iterator)
    •   Immutable Objects (BigInteger, String)
    •   Others (LayoutManager, Runnables)
•   Components
Object Categories
•   Short Living, Data Objects
    •   Collections (ArrayList, HashSet, Iterator)
    •   Immutable Objects (BigInteger, String)
    •   Others (LayoutManager, Runnables)
•   Components
    •   Singletons (ConnectionPool, Scheduler, ...)
Object Categories
•   Short Living, Data Objects
    •   Collections (ArrayList, HashSet, Iterator)
    •   Immutable Objects (BigInteger, String)
    •   Others (LayoutManager, Runnables)
•   Components
    •   Singletons (ConnectionPool, Scheduler, ...)
    •   Services (URLValidator, BillingService, ...)
Construction of
Data Objects
Construction of
    Data Objects

•   Convenience
Construction of
    Data Objects

•   Convenience
•   Readability
Construction of
    Data Objects

•   Convenience
•   Readability

Map<String,Foo> foos = new HashMap<String, Foo>();
Use Type Inference
Map<String,Foo> foos = new HashMap<String, Foo>();
Use Type Inference
Map<String,Foo> foos = new HashMap<String, Foo>();


Map<String,Foo> foos = Maps.newHashMap();
Use Type Inference
Map<String,Foo> foos = new HashMap<String, Foo>();


Map<String,Foo> foos = Maps.newHashMap();


public static <K, V> HashMap<K, V> newHashMap() {
  return new HashMap<K, V>();
}
Use Static Imports
Map<String,Foo> foos = Maps.newHashMap();
Use Static Imports
Map<String,Foo> foos = Maps.newHashMap();




Map<String,Foo> foos = newHashMap();
Use Static Imports
Map<String,Foo> foos = Maps.newHashMap();


import static com.google.common.collect.Maps.*;
...
Map<String,Foo> foos = newHashMap();
Use Var Args
List<String> names = newArrayList();
names.add("Foo");
names.add("Bar");
names.add("Baz");
Use Var Args
List<String> names = newArrayList();
names.add("Foo");
names.add("Bar");
names.add("Baz");


List<String> names = newArrayList("Foo","Bar","Baz");
Use Var Args
List<String> names = newArrayList();
names.add("Foo");
names.add("Bar");
names.add("Baz");


List<String> names = newArrayList("Foo","Bar","Baz");


public static <E> ArrayList<E> newArrayList(E... elements) {
   ...
}
Component Instantiation
 - Classical Approach -
Constructor Invocation
Constructor Invocation
 public class TwitterClient {
   void send(String message) {
     if (message.length() > 140) {
       Shortener shortener = new TinyUrlShortener();
       message = shortener.shorten(message);
     }
     if (message.length() <= 140) {
       Tweeter tweeter = new SmsTweeter();
       tweeter.send(message);
     }
   }
 }
Constructor Invocation

   Shortener shortener = new TinyUrlShortener();




   Tweeter tweeter = new SmsTweeter();
Constructor Invocation

• Strong Dependencies
• Not Testable
       Shortener shortener = new TinyUrlShortener();
       Tweeter tweeter = new SmsTweeter();
Component Instantiation
- Dependency Injection -
Constructor Parameters
Constructor Parameters
public class TwitterClient {
  private Shortener shortener; private Tweeter tweeter;
  public TwitterClient(Shortener shortener, Tweeter tweeter) {
    this.shortener = shortener;
    this.tweeter = tweeter;
  }
  void send(String message) {
    if (message.length() > 140) {
      message = shortener.shorten(message);
    }
    if (message.length() <= 140) {
      tweeter.send(message);
    }
  }
}
Constructor Parameters

// Initialize the component graph
Shortener shortener = new TinyUrlShortener();
Tweeter tweeter = new SmsTweeter();
TwitterClient client = new TwitterClient(shortener, tweeter);
// Do Something meaningful
client.send(“Hello World”);
Constructor Parameters
           ... Have Advantages
Constructor Parameters
                     ... Have Advantages

• Components Depend on Interfaces
Constructor Parameters
                     ... Have Advantages

• Components Depend on Interfaces
• Testable Code
Constructor Parameters
                       ... Have Advantages

• Components Depend on Interfaces
• Testable Code
• Dependencies are No Longer Burried in the
  Core of Your Application
Constructor Parameters
 ... Leave the Burden to the Client
Constructor Parameters
       ... Leave the Burden to the Client

HttpConnection http = new HttpConnection(“..”);
Constructor Parameters
       ... Leave the Burden to the Client

HttpConnection http = new HttpConnection(“..”);
SoapConnection soap = new SoapConnection(http);
Constructor Parameters
       ... Leave the Burden to the Client

HttpConnection http = new HttpConnection(“..”);
SoapConnection soap = new SoapConnection(http);
Shortener shortener = new TinyUrlShortener(soap);
Constructor Parameters
       ... Leave the Burden to the Client

HttpConnection http = new   HttpConnection(“..”);
SoapConnection soap = new   SoapConnection(http);
Shortener shortener = new   TinyUrlShortener(soap);
AndroidSmsSender sender =   new AndroidSmsSender();
Constructor Parameters
       ... Leave the Burden to the Client

HttpConnection http = new HttpConnection(“..”);
SoapConnection soap = new SoapConnection(http);
Shortener shortener = new TinyUrlShortener(soap);
AndroidSmsSender sender = new AndroidSmsSender();
Tweeter tweeter = new SmsTweeter(sender);
Constructor Parameters
       ... Leave the Burden to the Client

HttpConnection http = new HttpConnection(“..”);
SoapConnection soap = new SoapConnection(http);
Shortener shortener = new TinyUrlShortener(soap);
AndroidSmsSender sender = new AndroidSmsSender();
Tweeter tweeter = new SmsTweeter(sender);
TwitterClient client = new TwitterClient(shortener, tweeter);
Constructor Parameters
       ... Leave the Burden to the Client

HttpConnection http = new HttpConnection(“..”);
SoapConnection soap = new SoapConnection(http);
Shortener shortener = new TinyUrlShortener(soap);
AndroidSmsSender sender = new AndroidSmsSender();
Tweeter tweeter = new SmsTweeter(sender);
TwitterClient client = new TwitterClient(shortener, tweeter);
client.send(“Hello World”);
Constructor Parameters
                                             ... Revisited
public class TwitterClient {
  private Shortener shortener; private Tweeter tweeter;


    public TwitterClient(Shortener shortener, Tweeter tweeter) {
      this.shortener = shortener;
      this.tweeter = tweeter;
    }
    void send(String message) {
      ..
    }
}
Constructor Parameters
                                             ... Revisited
public class TwitterClient {
  private Shortener shortener; private Tweeter tweeter;
    @Inject
    public TwitterClient(Shortener shortener, Tweeter tweeter) {
      this.shortener = shortener;
      this.tweeter = tweeter;
    }
    void send(String message) {
      ..
    }
}
Constructor Parameters
                                           ... Revisited

// Initialize the component graph
Injector i = Guice.createInjector(new TweetModule());
// Obtain main component
TwitterClient client = i.getInstance(TwitterClient.class);
// Do something meaningful
client.send(“Hello Guice!”);
Remember This?
Encapsulated Dependencies


class TweetModule extends AbstractModule {
  protected void configure() {
    bind(Shortener.class).to(TinyUrlShortener.class);
    bind(Tweeter.class).to(SmsTweeter.class);
  }
}
Modern API
Design
Modern API
Design

        Easy To Use
Modern API
Design

        Easy To Use
         Consistent
Modern API
Design

         Easy To Use
          Consistent
        Hard To Misuse
Modern API
Design

         Easy To Use
          Consistent
        Hard To Misuse
        Easy To Read !
Half-caf venti
non-fat Latte to go.
Half-caf venti
non-fat Latte to go.
Fluent Interfaces


Half-caf venti
non-fat Latte to go.
Fluent Interfaces

CoffeeOrder order = new Latte();
order.setSize(Size.VENTI);
order.setCaffeine(Caffeine.HALF);
order.setMilk(MilkType.NONFAT);
order.setFoam(false);
Coffee coffee = order.prepare(true);
Fluent Interfaces

Coffee coffee = new Latte()
  .venti()
  .halfCaf()
  .nonFat()
  .prepare(TO_GO);
Fluent Interfaces

Chained Method-
Calls That Read Like
Natural Language
Fluent Interfaces

Chained Method-
Calls That Read Like
Natural Language


   http://www.wikihow.com/Order-at-Starbucks
Fluent Interfaces

StringBuilder builder = ..;
return builder
  .append(“The result is “)
  .append(result)
  .append(‘.’)
  .toString();
Fluent Interfaces
How To:
Fluent Interfaces
 How To:


1. Methods Modify Internal State and
Fluent Interfaces
 How To:


1. Methods Modify Internal State and
2. Return self or new Object
Fluent Interfaces
 How To:


1. Methods Modify Internal State and
2. Return self or new Object
3. Until Result is Returned
Fluent Interfaces
Examples: Guice Binder API




   bind(Service.class)
     .to(Implementation.class)
     .in(Scopes.REQUEST);
Fluent Interfaces
    Examples: EasyMock




LinkedList mocked = mock(LinkedList.class);
when(mocked.get(0)).thenReturn(“first”);
Fluent Interfaces
      Examples: Google Guava MapMaker

ConcurrentMap<Key, Value> map = new MapMaker()
       .softKeys()
       .weakValues()
       .expiration(30, MINUTES)
       .makeComputingMap(
           new Function<Key, Value>() {
             public Value apply(Key key) {
               return createExpensiveValue(key);
             }
           });
Fluent Interfaces
      Examples: Google Guava MapMaker
                With Closures
ConcurrentMap<Key, Value> map = new MapMaker()
       .softKeys()
       .weakValues()
       .expiration(30, MINUTES)
       .makeComputingMap(k|createExpensiveValue(k));
Visitor Pattern (GoF)


 ... separating an algorithm
from an object structure it
        operates on...
Polymorphic Dispatching
Polymorphic Dispatching


 Visitor visitor = new ExternalVisitor();
 visitor.visit(car);
 visitor.visit(bus);
 visitor.visit(engine);
 visitor.visit(wheel);
Polymorphic Dispatching

 class ExternalVisitor {
   String visit(Object o) {
     if (o instanceof Bus) {
       ..
     } else if (o instanceof Car) {
       ..
     } else if (o instanceof Engine) {
       ..
     } else ..
   }
 }
Polymorphic Dispatching

Dispatcher dispatcher = new Dispatcher(this, “doVisit”);
String visit(Object o) {
  return dispatcher.dispatch(o);
}


String   doVisit(Bus b) {return “Bus: ” + print(b.getParts());}
String   doVisit(Car c) {return “Car: ” + print(c.getParts());}
String   doVisit(Engine e) { ... }
String   doVisit(Collection<?> parts) { ... }
Polymorphic Dispatching

•   Non Invasive External Visitor
Polymorphic Dispatching

•   Non Invasive External Visitor
•   Handle Arbitrary Object Graphs
Polymorphic Dispatching

•   Non Invasive External Visitor
•   Handle Arbitrary Object Graphs
•   Eliminate if-instanceof-else Cascades
Polymorphic Dispatching

•   Non Invasive External Visitor
•   Handle Arbitrary Object Graphs
•   Eliminate if-instanceof-else Cascades
•   Dispatch According to Runtime Type of Arguments
    (Like switch-Statement on Types)
Annotation-based APIs
Annotation-based APIs
addAction(new AbstractAction(“Exit”) {
    {
      putValue(MNEMONIC_KEY, “E”);
      putValue(SHORT_DESCRIPTION, “Exit App”);
    }
    public void actionPerformed(ActionEvent e) {
      System.exit(0);
    }
});
Annotation-based APIs


@Action(“Exit”, mnemonic=”E”, desc=”Exit App”)
public void exit(ActionEvent e) {
  System.exit(0);
}
Annotation-based APIs
 Examples: Property Change Events



@PropertyChangeListener({“size”})
public void invalidateLayout(PropertyChangeEvent e) {
  ..
}
@PropertyChangeListener({“value”, “selectedItem”})
public void revalidate(PropertyChangeEvent e) {
  ..
}
Annotation-based APIs
 Examples: Validation

@Validate(OnSave, nullIsOk=true, property=”EMail”)
ValidationResult matchesPattern(String s) {
  if (!s.matches(PATTERN)) {
    return ValidationResult.createError(..);
  }
  return OK;
}
Annotation-based APIs

    •   More Concise Code
Annotation-based APIs

    •   More Concise Code
    •   Avoid Anonymous Classes
Annotation-based APIs

    •   More Concise Code
    •   Avoid Anonymous Classes
    •   Easier to Understand
Annotation-based APIs

    •   More Concise Code
    •   Avoid Anonymous Classes
    •   Easier to Understand
    •   Less Code to Maintain
Annotation-based APIs

    •   More Concise Code
    •   Avoid Anonymous Classes
    •   Easier to Understand
    •   Less Code to Maintain
    •   Method can be overwritten
        (Extensibility, Testability)
Recab
Recab
Construction of Data Objects
Recab
Construction of Data Objects
   Dependency Injection
Recab
Construction of Data Objects
   Dependency Injection
      Fluent Interfaces
Recab
Construction of Data Objects
   Dependency Injection
      Fluent Interfaces
   Polymorphic Dispatch
Recab
Construction of Data Objects
   Dependency Injection
      Fluent Interfaces
   Polymorphic Dispatch
   Annotation-based APIs
The Good News?

• One Day Java May Have
The Good News?

• One Day Java May Have
 • Closures (Java 8 - JSR 335)
The Good News?

• One Day Java May Have
 • Closures (Java 8 - JSR 335)
 • Improved Type Inference (Java 7 - JSR 334)
The Good News?

• One Day Java May Have
 • Closures (Java 8 - JSR 335)
 • Improved Type Inference (Java 7 - JSR 334)
 • ...
The Good News?

• One Day Java May Have
 • Closures (Java 8 - JSR 335)
 • Improved Type Inference (Java 7 - JSR 334)
 • ...
• Due 2011 & 2012
Thanks.

Weitere ähnliche Inhalte

Was ist angesagt?

Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KZepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KThomas Fuchs
 
Ajax tutorial
Ajax tutorialAjax tutorial
Ajax tutorialKat Roque
 
Using Xcore with Xtext
Using Xcore with XtextUsing Xcore with Xtext
Using Xcore with XtextHolger Schill
 
Scala ActiveRecord
Scala ActiveRecordScala ActiveRecord
Scala ActiveRecordscalaconfjp
 
Alternatives of JPA/Hibernate
Alternatives of JPA/HibernateAlternatives of JPA/Hibernate
Alternatives of JPA/HibernateSunghyouk Bae
 
Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008Yardena Meymann
 
Http4s, Doobie and Circe: The Functional Web Stack
Http4s, Doobie and Circe: The Functional Web StackHttp4s, Doobie and Circe: The Functional Web Stack
Http4s, Doobie and Circe: The Functional Web StackGaryCoady
 
appengine java night #1
appengine java night #1appengine java night #1
appengine java night #1Shinichi Ogawa
 
Slick: Bringing Scala’s Powerful Features to Your Database Access
Slick: Bringing Scala’s Powerful Features to Your Database Access Slick: Bringing Scala’s Powerful Features to Your Database Access
Slick: Bringing Scala’s Powerful Features to Your Database Access Rebecca Grenier
 
Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017Sunghyouk Bae
 
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018Sunghyouk Bae
 

Was ist angesagt? (20)

Requery overview
Requery overviewRequery overview
Requery overview
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KZepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
 
XQuery Design Patterns
XQuery Design PatternsXQuery Design Patterns
XQuery Design Patterns
 
Ajax tutorial
Ajax tutorialAjax tutorial
Ajax tutorial
 
Using Xcore with Xtext
Using Xcore with XtextUsing Xcore with Xtext
Using Xcore with Xtext
 
Scala coated JVM
Scala coated JVMScala coated JVM
Scala coated JVM
 
Scala active record
Scala active recordScala active record
Scala active record
 
All about scala
All about scalaAll about scala
All about scala
 
Scala in Practice
Scala in PracticeScala in Practice
Scala in Practice
 
Scala ActiveRecord
Scala ActiveRecordScala ActiveRecord
Scala ActiveRecord
 
Alternatives of JPA/Hibernate
Alternatives of JPA/HibernateAlternatives of JPA/Hibernate
Alternatives of JPA/Hibernate
 
Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008
 
Http4s, Doobie and Circe: The Functional Web Stack
Http4s, Doobie and Circe: The Functional Web StackHttp4s, Doobie and Circe: The Functional Web Stack
Http4s, Doobie and Circe: The Functional Web Stack
 
Spring data requery
Spring data requerySpring data requery
Spring data requery
 
appengine java night #1
appengine java night #1appengine java night #1
appengine java night #1
 
Slick: Bringing Scala’s Powerful Features to Your Database Access
Slick: Bringing Scala’s Powerful Features to Your Database Access Slick: Bringing Scala’s Powerful Features to Your Database Access
Slick: Bringing Scala’s Powerful Features to Your Database Access
 
Scale up your thinking
Scale up your thinkingScale up your thinking
Scale up your thinking
 
Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017
 
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
 

Andere mochten auch

2009 LA Film Festival
2009 LA Film Festival2009 LA Film Festival
2009 LA Film FestivalKim_Spence_49
 
Domain Specific Languages (EclipseCon 2012)
Domain Specific Languages (EclipseCon 2012)Domain Specific Languages (EclipseCon 2012)
Domain Specific Languages (EclipseCon 2012)Sven Efftinge
 
Film Independent's 2009 Spirit Awards
Film Independent's 2009 Spirit AwardsFilm Independent's 2009 Spirit Awards
Film Independent's 2009 Spirit AwardsKim_Spence_49
 
Presentation To Cumbria Cim
Presentation To Cumbria CimPresentation To Cumbria Cim
Presentation To Cumbria CimLakeland
 
Challenges In Dsl Design
Challenges In Dsl DesignChallenges In Dsl Design
Challenges In Dsl DesignSven Efftinge
 

Andere mochten auch (8)

Happy New Year!
Happy New Year!Happy New Year!
Happy New Year!
 
Chromosomes
ChromosomesChromosomes
Chromosomes
 
2009 LA Film Festival
2009 LA Film Festival2009 LA Film Festival
2009 LA Film Festival
 
Domain Specific Languages (EclipseCon 2012)
Domain Specific Languages (EclipseCon 2012)Domain Specific Languages (EclipseCon 2012)
Domain Specific Languages (EclipseCon 2012)
 
Film Independent's 2009 Spirit Awards
Film Independent's 2009 Spirit AwardsFilm Independent's 2009 Spirit Awards
Film Independent's 2009 Spirit Awards
 
Xtext Webinar
Xtext WebinarXtext Webinar
Xtext Webinar
 
Presentation To Cumbria Cim
Presentation To Cumbria CimPresentation To Cumbria Cim
Presentation To Cumbria Cim
 
Challenges In Dsl Design
Challenges In Dsl DesignChallenges In Dsl Design
Challenges In Dsl Design
 

Ähnlich wie Getting the most out of Java [Nordic Coding-2010]

ASP.Net 5 and C# 6
ASP.Net 5 and C# 6ASP.Net 5 and C# 6
ASP.Net 5 and C# 6Andy Butland
 
Android Automated Testing
Android Automated TestingAndroid Automated Testing
Android Automated Testingroisagiv
 
CouchDB on Android
CouchDB on AndroidCouchDB on Android
CouchDB on AndroidSven Haiges
 
Developing RESTful WebServices using Jersey
Developing RESTful WebServices using JerseyDeveloping RESTful WebServices using Jersey
Developing RESTful WebServices using Jerseyb_kathir
 
VelocityGraph Introduction
VelocityGraph IntroductionVelocityGraph Introduction
VelocityGraph IntroductionMats Persson
 
Building a friendly .NET SDK to connect to Space
Building a friendly .NET SDK to connect to SpaceBuilding a friendly .NET SDK to connect to Space
Building a friendly .NET SDK to connect to SpaceMaarten Balliauw
 
Annotation processing and code gen
Annotation processing and code genAnnotation processing and code gen
Annotation processing and code genkoji lin
 
Property Wrappers or how Swift decided to become Java
Property Wrappers or how Swift decided to become JavaProperty Wrappers or how Swift decided to become Java
Property Wrappers or how Swift decided to become JavaVincent Pradeilles
 
Lambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive CodeLambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive CodeIan Robertson
 
Data models in Angular 1 & 2
Data models in Angular 1 & 2Data models in Angular 1 & 2
Data models in Angular 1 & 2Adam Klein
 
Refactoring In Tdd The Missing Part
Refactoring In Tdd The Missing PartRefactoring In Tdd The Missing Part
Refactoring In Tdd The Missing PartGabriele Lana
 
Painless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldPainless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldChristian Melchior
 
RIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWTRIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWTMichael Galpin
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans Fabrizio Giudici
 

Ähnlich wie Getting the most out of Java [Nordic Coding-2010] (20)

ASP.Net 5 and C# 6
ASP.Net 5 and C# 6ASP.Net 5 and C# 6
ASP.Net 5 and C# 6
 
Android Automated Testing
Android Automated TestingAndroid Automated Testing
Android Automated Testing
 
"Javascript" por Tiago Rodrigues
"Javascript" por Tiago Rodrigues"Javascript" por Tiago Rodrigues
"Javascript" por Tiago Rodrigues
 
CouchDB on Android
CouchDB on AndroidCouchDB on Android
CouchDB on Android
 
servlets
servletsservlets
servlets
 
Developing RESTful WebServices using Jersey
Developing RESTful WebServices using JerseyDeveloping RESTful WebServices using Jersey
Developing RESTful WebServices using Jersey
 
VelocityGraph Introduction
VelocityGraph IntroductionVelocityGraph Introduction
VelocityGraph Introduction
 
Building a friendly .NET SDK to connect to Space
Building a friendly .NET SDK to connect to SpaceBuilding a friendly .NET SDK to connect to Space
Building a friendly .NET SDK to connect to Space
 
Annotation processing and code gen
Annotation processing and code genAnnotation processing and code gen
Annotation processing and code gen
 
Property Wrappers or how Swift decided to become Java
Property Wrappers or how Swift decided to become JavaProperty Wrappers or how Swift decided to become Java
Property Wrappers or how Swift decided to become Java
 
Life outside WO
Life outside WOLife outside WO
Life outside WO
 
OWASP Proxy
OWASP ProxyOWASP Proxy
OWASP Proxy
 
Lambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive CodeLambda Chops - Recipes for Simpler, More Expressive Code
Lambda Chops - Recipes for Simpler, More Expressive Code
 
Advance Java
Advance JavaAdvance Java
Advance Java
 
Data models in Angular 1 & 2
Data models in Angular 1 & 2Data models in Angular 1 & 2
Data models in Angular 1 & 2
 
Refactoring In Tdd The Missing Part
Refactoring In Tdd The Missing PartRefactoring In Tdd The Missing Part
Refactoring In Tdd The Missing Part
 
Painless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldPainless Persistence in a Disconnected World
Painless Persistence in a Disconnected World
 
Play á la Rails
Play á la RailsPlay á la Rails
Play á la Rails
 
RIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWTRIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWT
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans
 

Mehr von Sven Efftinge

Parsing Expression With Xtext
Parsing Expression With XtextParsing Expression With Xtext
Parsing Expression With XtextSven Efftinge
 
Language Engineering With Xtext
Language Engineering With XtextLanguage Engineering With Xtext
Language Engineering With XtextSven Efftinge
 
Auto-GWT : Better GWT Programming with Xtend
Auto-GWT : Better GWT Programming with XtendAuto-GWT : Better GWT Programming with Xtend
Auto-GWT : Better GWT Programming with XtendSven Efftinge
 
Functional programming with Xtend
Functional programming with XtendFunctional programming with Xtend
Functional programming with XtendSven Efftinge
 
Codegeneration With Xtend
Codegeneration With XtendCodegeneration With Xtend
Codegeneration With XtendSven Efftinge
 
Xtend @ EclipseCon 2012
Xtend @ EclipseCon 2012Xtend @ EclipseCon 2012
Xtend @ EclipseCon 2012Sven Efftinge
 
This Is Not Your Father's Java
This Is Not Your Father's JavaThis Is Not Your Father's Java
This Is Not Your Father's JavaSven Efftinge
 
Xtext at MDD Day 2010
Xtext at MDD Day 2010Xtext at MDD Day 2010
Xtext at MDD Day 2010Sven Efftinge
 
Dependency Injection for Eclipse developers
Dependency Injection for Eclipse developersDependency Injection for Eclipse developers
Dependency Injection for Eclipse developersSven Efftinge
 
Code Generation in Agile Projects
Code Generation in Agile ProjectsCode Generation in Agile Projects
Code Generation in Agile ProjectsSven Efftinge
 
Bessere Softwareentwicklung (Itemis Wintercon)
Bessere Softwareentwicklung (Itemis Wintercon)Bessere Softwareentwicklung (Itemis Wintercon)
Bessere Softwareentwicklung (Itemis Wintercon)Sven Efftinge
 
Domain-Specific Languages in der Praxis
Domain-Specific Languages in der PraxisDomain-Specific Languages in der Praxis
Domain-Specific Languages in der PraxisSven Efftinge
 
Xtext @ Profict Summer Camp
Xtext @ Profict Summer CampXtext @ Profict Summer Camp
Xtext @ Profict Summer CampSven Efftinge
 
Vermisste Sprachfeatures in Java (german)
Vermisste Sprachfeatures in Java (german)Vermisste Sprachfeatures in Java (german)
Vermisste Sprachfeatures in Java (german)Sven Efftinge
 

Mehr von Sven Efftinge (20)

Parsing Expression With Xtext
Parsing Expression With XtextParsing Expression With Xtext
Parsing Expression With Xtext
 
Language Engineering With Xtext
Language Engineering With XtextLanguage Engineering With Xtext
Language Engineering With Xtext
 
Future of Xtext
Future of XtextFuture of Xtext
Future of Xtext
 
Auto-GWT : Better GWT Programming with Xtend
Auto-GWT : Better GWT Programming with XtendAuto-GWT : Better GWT Programming with Xtend
Auto-GWT : Better GWT Programming with Xtend
 
Functional programming with Xtend
Functional programming with XtendFunctional programming with Xtend
Functional programming with Xtend
 
Codegeneration With Xtend
Codegeneration With XtendCodegeneration With Xtend
Codegeneration With Xtend
 
Gwt and Xtend
Gwt and XtendGwt and Xtend
Gwt and Xtend
 
Xtend @ EclipseCon 2012
Xtend @ EclipseCon 2012Xtend @ EclipseCon 2012
Xtend @ EclipseCon 2012
 
Eclipse Xtend
Eclipse XtendEclipse Xtend
Eclipse Xtend
 
This Is Not Your Father's Java
This Is Not Your Father's JavaThis Is Not Your Father's Java
This Is Not Your Father's Java
 
Xtext at MDD Day 2010
Xtext at MDD Day 2010Xtext at MDD Day 2010
Xtext at MDD Day 2010
 
Dependency Injection for Eclipse developers
Dependency Injection for Eclipse developersDependency Injection for Eclipse developers
Dependency Injection for Eclipse developers
 
Code Generation in Agile Projects
Code Generation in Agile ProjectsCode Generation in Agile Projects
Code Generation in Agile Projects
 
Xtext Eclipse Con
Xtext Eclipse ConXtext Eclipse Con
Xtext Eclipse Con
 
Generic Editor
Generic EditorGeneric Editor
Generic Editor
 
Eclipse Banking Day
Eclipse Banking DayEclipse Banking Day
Eclipse Banking Day
 
Bessere Softwareentwicklung (Itemis Wintercon)
Bessere Softwareentwicklung (Itemis Wintercon)Bessere Softwareentwicklung (Itemis Wintercon)
Bessere Softwareentwicklung (Itemis Wintercon)
 
Domain-Specific Languages in der Praxis
Domain-Specific Languages in der PraxisDomain-Specific Languages in der Praxis
Domain-Specific Languages in der Praxis
 
Xtext @ Profict Summer Camp
Xtext @ Profict Summer CampXtext @ Profict Summer Camp
Xtext @ Profict Summer Camp
 
Vermisste Sprachfeatures in Java (german)
Vermisste Sprachfeatures in Java (german)Vermisste Sprachfeatures in Java (german)
Vermisste Sprachfeatures in Java (german)
 

Kürzlich hochgeladen

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 

Kürzlich hochgeladen (20)

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 

Getting the most out of Java [Nordic Coding-2010]

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n