vermisste sprachfeatures in java (german)
TRANSCRIPT
![Page 1: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/1.jpg)
Sven Efftinge - itemis AG
Vermisste Sprachfeatures in Java
![Page 2: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/2.jpg)
Sven Efftinge - itemis AG
Vorab
![Page 3: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/3.jpg)
Sven Efftinge - itemis AG
Vorab
•Blick über den Tellerrand
![Page 4: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/4.jpg)
Sven Efftinge - itemis AG
Vorab
•Blick über den Tellerrand
•Welche Probleme lösen wir auf welche Weise?
![Page 5: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/5.jpg)
Sven Efftinge - itemis AG
Vorab
•Blick über den Tellerrand
•Welche Probleme lösen wir auf welche Weise?
•Wann und warum nutzen wir andere Lösungen (XML)?
![Page 6: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/6.jpg)
Sven Efftinge - itemis AG
Vorab
•Blick über den Tellerrand
•Welche Probleme lösen wir auf welche Weise?
•Wann und warum nutzen wir andere Lösungen (XML)?
•Wie machen das andere Sprachen
![Page 7: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/7.jpg)
Sven Efftinge - itemis AG
Vorab
•Blick über den Tellerrand
•Welche Probleme lösen wir auf welche Weise?
•Wann und warum nutzen wir andere Lösungen (XML)?
•Wie machen das andere Sprachen
•Rückwärtskompatibilität wird ignoriert
![Page 8: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/8.jpg)
Properties
machen Code kürzer, prägnanter und damit besser wartbar
![Page 9: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/9.jpg)
Sven Efftinge - itemis AG
Kommt Ihnen das bekannt vor?
![Page 10: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/10.jpg)
Sven Efftinge - itemis AG
Kommt Ihnen das bekannt vor?
public class Customer { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
![Page 11: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/11.jpg)
Sven Efftinge - itemis AG
Kommt Ihnen das bekannt vor?
public class Customer { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }} Oder das?
Customer c = new Customer();c.setName(“foobar”);//...return c.getName();
![Page 12: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/12.jpg)
Sven Efftinge - itemis AG
Kommt Ihnen das bekannt vor?
public class Customer { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }} Oder das?
Customer c = new Customer();c.setName(“foobar”);//...return c.getName();
![Page 13: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/13.jpg)
Sven Efftinge - itemis AG
Warum nicht einfach Felder benutzen?
public class Customer { public String name;}
... und ...
Customer c = new Customer();c.name = “foobar”;//...return c.name;
![Page 14: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/14.jpg)
Sven Efftinge - itemis AG
Warum nicht einfach Felder benutzen?
public class Customer { public String name;}
... und ...Customer c = new Customer();c.name = “foobar”;//...return c.name;
• Properties sind evtl. read-only• getter bzw. setter enthalten Logik
![Page 15: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/15.jpg)
Sven Efftinge - itemis AG
Mit “Properties”
• http://weblogs.java.net/blog/forax/archive/2007/01/property_reload.html
![Page 16: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/16.jpg)
Sven Efftinge - itemis AG
Mit “Properties”
public class Customer { property String name;} ... und ...
Customer c = new Customer();c.name = “foobar”;//...return c.name;
• http://weblogs.java.net/blog/forax/archive/2007/01/property_reload.html
![Page 17: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/17.jpg)
Sven Efftinge - itemis AG
Mit “Properties”
public class Customer { property String name set { if (val!=null) this.name = val; };}
Beispiel für read-only Property mit speziellem Setter
• http://weblogs.java.net/blog/forax/archive/2007/01/property_reload.html
![Page 18: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/18.jpg)
Type Inference
macht den Code leserlicher, wartbarer und reduziert Komplexität
![Page 19: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/19.jpg)
Sven Efftinge - itemis AG
Ein typisches Stück Javacode
public List<Person> withoutEmil(List<Person> list) { List<Person> result = new ArrayList<Person>(); for(Person p : list) { if (!p.getName().equals(“Emil”)) result.add(p); } return result;}
![Page 20: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/20.jpg)
Sven Efftinge - itemis AG
Type Inference
public List<Person> withoutEmil(List<Person> list) { List<Person> result = new ArrayList<Person>(); for(Person p : list) { if (!p.getName().equals(“Emil”)) result.add(p); } return result;}
Typargument kann abgeleitet werden
![Page 21: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/21.jpg)
Sven Efftinge - itemis AG
Type Inference
public List<Person> withoutEmil(List<Person> list) { List<Person> result = new ArrayList(); for(Person p : list) { if (!p.getName().equals(“Emil”)) result.add(p); } return result;} Variablentyp kann abgeleitet werden
![Page 22: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/22.jpg)
Sven Efftinge - itemis AG
Type Inference
public List<Person> withoutEmil(List<Person> list) { List<Person> result = new ArrayList(); for(p : list) { if (!p.getName().equals(“Emil”)) result.add(p); } return result;}
Rückgabetyp kann abgeleitet werden
![Page 23: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/23.jpg)
Sven Efftinge - itemis AG
Type Inference
public withoutEmil(List<Person> list) { List<Person> result = new ArrayList(); for(p : list) { if (!p.getName().equals(“Emil”)) result.add(p); } return result;}
![Page 24: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/24.jpg)
Sven Efftinge - itemis AG
Type Inference in Java 7?
![Page 25: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/25.jpg)
Sven Efftinge - itemis AG
Type Inference in Java 7?
// Variablen Deklaration
![Page 26: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/26.jpg)
Sven Efftinge - itemis AG
Type Inference in Java 7?
// Variablen DeklarationMap<String, List<Person>> families = new HashMap<>();
![Page 27: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/27.jpg)
Sven Efftinge - itemis AG
Type Inference in Java 7?
// Variablen DeklarationMap<String, List<Person>> families = new HashMap<>(); var families = new HashMap<String, List<Person>>();
![Page 28: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/28.jpg)
Sven Efftinge - itemis AG
Type Inference in Java 7?
// Variablen DeklarationMap<String, List<Person>> families = new HashMap<>(); var families = new HashMap<String, List<Person>>();var families = createFamilies();
![Page 29: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/29.jpg)
Sven Efftinge - itemis AG
Type Inference in Java 7?
// Variablen DeklarationMap<String, List<Person>> families = new HashMap<>(); var families = new HashMap<String, List<Person>>();var families = createFamilies();
// Ableiten aus dem Methodenkontext
![Page 30: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/30.jpg)
Sven Efftinge - itemis AG
Type Inference in Java 7?
// Variablen DeklarationMap<String, List<Person>> families = new HashMap<>(); var families = new HashMap<String, List<Person>>();var families = createFamilies();
// Ableiten aus dem MethodenkontexttimeWaitsFor(new HashSet<>());
![Page 31: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/31.jpg)
Sven Efftinge - itemis AG
Type Inference in Java 7?
// Variablen DeklarationMap<String, List<Person>> families = new HashMap<>(); var families = new HashMap<String, List<Person>>();var families = createFamilies();
// Ableiten aus dem MethodenkontexttimeWaitsFor(new HashSet<>());// oder auch
![Page 32: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/32.jpg)
Sven Efftinge - itemis AG
Type Inference in Java 7?
// Variablen DeklarationMap<String, List<Person>> families = new HashMap<>(); var families = new HashMap<String, List<Person>>();var families = createFamilies();
// Ableiten aus dem MethodenkontexttimeWaitsFor(new HashSet<>());// oder auchtimeWaitsFor(Collections.emptySet());
![Page 33: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/33.jpg)
Sven Efftinge - itemis AG
Type Inference in Java 7?
// Variablen DeklarationMap<String, List<Person>> families = new HashMap<>(); var families = new HashMap<String, List<Person>>();var families = createFamilies();
// Ableiten aus dem MethodenkontexttimeWaitsFor(new HashSet<>());// oder auchtimeWaitsFor(Collections.emptySet()); // Mit Java 5 : // timeWaitsFor(Collections.<Man>emptySet());
![Page 34: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/34.jpg)
Multiline Stringliterale
macht den Code leserlicher und wartbarer - ersetzt externe Lösungen
![Page 35: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/35.jpg)
Sven Efftinge - itemis AG
Neulich beim Testen....
public void testConfig() throws Exception { Configuration c = parse( "<config> " + " <bean class=\""+ Foobar.class.getName()+"\">"+ " <someProp value=\"foobar\"/>"+ " </bean>"+ "</config>"); assertEquals("foobar", c.getBeans().get(0).get("someProp"));}
![Page 36: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/36.jpg)
Sven Efftinge - itemis AG
Besser:
public void testConfig() throws Exception { Configuration c = parse( """<config> <bean class="${Foobar.class.getName()}"> <someProp value="foobar"/> </bean> </config>"""); assertEquals("foobar",c.getBeans().get(0).get("someProp"));}
![Page 37: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/37.jpg)
Sven Efftinge - itemis AG
Anwendungsfälle für Multiline Stringliterale
![Page 38: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/38.jpg)
Sven Efftinge - itemis AG
Anwendungsfälle für Multiline Stringliterale
•Textuelle Testdaten
![Page 39: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/39.jpg)
Sven Efftinge - itemis AG
Anwendungsfälle für Multiline Stringliterale
•Textuelle Testdaten
•Codegenerierung
![Page 40: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/40.jpg)
Sven Efftinge - itemis AG
Anwendungsfälle für Multiline Stringliterale
•Textuelle Testdaten
•Codegenerierung
•HTML/XML Erzeugung (Servlets, etc.)
![Page 41: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/41.jpg)
Sven Efftinge - itemis AG
Anwendungsfälle für Multiline Stringliterale
•Textuelle Testdaten
•Codegenerierung
•HTML/XML Erzeugung (Servlets, etc.)
•Serienbriefe
![Page 42: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/42.jpg)
Sven Efftinge - itemis AG
Anwendungsfälle für Multiline Stringliterale
•Textuelle Testdaten
•Codegenerierung
•HTML/XML Erzeugung (Servlets, etc.)
•Serienbriefe
•Nachrichten an den User (Logging, Error Messages)
![Page 43: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/43.jpg)
author - company
Multiline Stringliterale “selbstgebaut”
public void testConfig() throws Exception { Configuration c = parse( S(/*<config> <bean class="${Foobar.class.getName()}"> <someProp value="foobar"/> </bean> </config>*/)); assertEquals("foobar",c.getBeans().get(0).get("someProp"));}
![Page 44: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/44.jpg)
author - company
Multiline Stringliterale “selbstgebaut”
public static String S() { StackTraceElement element = new RuntimeException().getStackTrace()[1]; String name = element.getClassName().replace('.', '/') + ".java"; InputStream in = getClassLoader().getResourceAsStream(name); String s = convertStreamToString(in, element.getLineNumber()); return s.substring(s.indexOf("/*")+2, s.indexOf("*/"));}
![Page 45: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/45.jpg)
Initializer
macht strukturellen Code deklarativ und damit leserlicherersetzt externe Lösungen (z.B. XML)
![Page 46: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/46.jpg)
Sven Efftinge - itemis AG
Java ist objektorientiert, oder?
![Page 47: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/47.jpg)
Sven Efftinge - itemis AG
Java ist objektorientiert, oder?
Customer c = new Customer();c.setName("foobar");c.setId(4711); Address address = new Address();address.setStreet("Schauenburgerstr. 116");address.setZip("24118");address.setCity("Kiel"); c.setAddress(address); Order o1 = new Order();o1.setArticleId(0815);o1.setAmount(2);c.addOrder(o1);
![Page 48: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/48.jpg)
Sven Efftinge - itemis AG
Aktuell bevorzugter Weg
<Customer name="foobar" id=”4711”>
<address><Address
street=”Schauenburgerstr. 116”zip=”24118”city=”Kiel”/>
</address><orders>
<Order articleId=”0815”amount=”2”/>
</orders></Customer>
![Page 49: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/49.jpg)
Sven Efftinge - itemis AG
So könnte es aussehen...
Customer c = new Customer {name = "foobar";id = 4711;address = new Address {
street = "Schauenburgerstr. 116";zip = "24118";city = "Kiel";
};addOrder(new Order {
articleId = 0815;amount = 2;
});};
![Page 50: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/50.jpg)
Sven Efftinge - itemis AG
Initializer in anderen Sprachen
• Builder in Groovy
• Modelltransformationssprachen (ATL, QVT)
• In C# sieht’s so aus: Person person = new Person { FirstName = "Scott", LastName = "Guthrie", Age = 32, Address = new Address { Street = "One Microsoft Way", City = "Redmond", State = "WA", Zip = 98052 } };
![Page 51: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/51.jpg)
Sven Efftinge - itemis AG
Übrigens so geht es auch schon heute...
Customer c = new Customer() {{name = "foobar";id = 4711;address = new Address() {{
street = "Schauenburgerstr. 116";zip = "24118";city = "Kiel";
}};addOrder(new Order() {{
articleId = 0815;amount = 2;
}});}};
![Page 52: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/52.jpg)
Sven Efftinge - itemis AG
Übrigens so geht es auch schon heute...
Customer c = new Customer() {{name = "foobar";id = 4711;address = new Address() {{
street = "Schauenburgerstr. 116";zip = "24118";city = "Kiel";
}};addOrder(new Order() {{
articleId = 0815;amount = 2;
}});}};
Kombination aus Anonymen Klassen und den “alten” non-static initializers
![Page 53: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/53.jpg)
Literale für Collections
macht strukturellen Code deklarativ und damit leserlicher
![Page 54: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/54.jpg)
Sven Efftinge - itemis AG
Collections sind allgegenwärtig
![Page 55: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/55.jpg)
Sven Efftinge - itemis AG
Collections sind allgegenwärtig
Map<String,Person> personByName = new HashMap<String,Person>();personByName.put(heinrich.getName(), heinrich);personByName.put(maria.getName(), maria);personByName.put(horst.getName(), horst);
![Page 56: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/56.jpg)
Sven Efftinge - itemis AG
Collections sind allgegenwärtig
Map<String,Person> personByName = new HashMap<String,Person>();personByName.put(heinrich.getName(), heinrich);personByName.put(maria.getName(), maria);personByName.put(horst.getName(), horst);
Map<String,Person> personByName = new HashMap<String,Person>() {heinrich.getName() => heinrich,maria.getName() => maria,horst.getName() => horst};
![Page 57: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/57.jpg)
Sven Efftinge - itemis AG
Collections sind allgegenwärtig
Map<String,Person> personByName = new HashMap<String,Person>();personByName.put(heinrich.getName(), heinrich);personByName.put(maria.getName(), maria);personByName.put(horst.getName(), horst);
// mit Typinferenz könnte es so aussehenvar personByName = new HashMap<>() {
heinrich.getName() => heinrich,maria.getName() => maria,horst.getName() => horst};
![Page 58: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/58.jpg)
Sven Efftinge - itemis AG
Collectionliteral in C#
Dictionary<int, StudentName> students = new Dictionary<int, StudentName>(){ { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}}, { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317}}, { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198}}};
![Page 59: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/59.jpg)
Sven Efftinge - itemis AG
Collectionliteral in C#
Dictionary<int, StudentName> students = new Dictionary<int, StudentName>(){ { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}}, { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317}}, { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198}}};
In Kombination mit den zuvor genannten Erweiterungen könnte es in Java so aussehen:
var students = new HashMap<>() { 111 => new StudentName {firstName="Sachin", lastName="Karnik", id=211}, 112 => new StudentName {firstName="Dina", lastName="Salimzianova", id=317}, 113 => new StudentName {firstName="Andy", lastName="Ruth", id=198}};
![Page 60: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/60.jpg)
Sven Efftinge - itemis AG
Collection-Literale in Java
import static java.util.Arrays.asList;
class Foo { List<String> createList() { return asList(“a”,”b”,”c”); }}
![Page 61: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/61.jpg)
import static com.google.common.collect.Maps.*;
class Foo { List<String, int> createMap() { return immutableMap(“a”,2,”c”,3); }}
Sven Efftinge - itemis AG
Collection-Literale in Java
![Page 62: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/62.jpg)
Eine Proposal für eine Spracherweiterung gibt es z.B. unter
http://jroller.com/scolebourne/entry/java_7_list_and_map
Sven Efftinge - itemis AG
Collection-Literale in Java
![Page 63: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/63.jpg)
Anonymous Types
Strukturierte Sichten auf Datenbestände
![Page 64: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/64.jpg)
Sven Efftinge - itemis AG
Anonyme Datenstrukturen erzeugen
var students = new Map<>() { 111 => new {firstName="Sachin", lastName="Karnik", ID=211}, 112 => new {firstName="Dina", lastName="Salimzianova", ID=317}, 113 => new {firstName="Andy", lastName="Ruth", ID=1989} };
![Page 65: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/65.jpg)
Sven Efftinge - itemis AG
Anonyme Datenstrukturen erzeugen
var students = new Map<>() { 111 => new {firstName="Sachin", lastName="Karnik", ID=211}, 112 => new {firstName="Dina", lastName="Salimzianova", ID=317}, 113 => new {firstName="Andy", lastName="Ruth", ID=1989} };
Map<Int, AnonymousType<firstName::String,lastName::String,ID::Int>>
Typinferenz ist unbedingt erforderlich
![Page 66: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/66.jpg)
Closures
Neue Kontrollstrukturen per Library
![Page 67: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/67.jpg)
Sven Efftinge - itemis AG
Typischer Javacode
![Page 68: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/68.jpg)
Sven Efftinge - itemis AG
Typischer Javacode
List<Person> filterByName(List<Person> persons, String name) { List<Person> result = new ArrayList<Person>(); for(Person person : persons) { if (person.getName().equals(name)) { result.add(person); } } return result;}
![Page 69: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/69.jpg)
Sven Efftinge - itemis AG
Das Selbe mit Closures
List<Person> filterByName(List<Person> persons, String name) { return persons.select({p => p.getName().equals(name)});}
![Page 70: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/70.jpg)
Sven Efftinge - itemis AG
Das Selbe mit Closures
List<T> select({T=>boolean} function) { List<T> result = new ArrayList<T>(); for(T e : this) { if (function.invoke(e)) { result.add(e); } } return result;}
List<Person> filterByName(List<Person> persons, String name) { return persons.select({p => p.getName().equals(name)});}
![Page 71: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/71.jpg)
Sven Efftinge - itemis AG
Closure: Anonyme Funktion
![Page 72: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/72.jpg)
Sven Efftinge - itemis AG
Closure: Anonyme Funktion
• Ein Literal für Funktionen
![Page 73: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/73.jpg)
Sven Efftinge - itemis AG
Closure: Anonyme Funktion
• Ein Literal für Funktionen
• Speichert den Umgebenden Kontext und greift bei der Ausführung darauf zu
![Page 74: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/74.jpg)
Sven Efftinge - itemis AG
Closure: Anonyme Funktion
• Ein Literal für Funktionen
• Speichert den Umgebenden Kontext und greift bei der Ausführung darauf zu
{Person p=>p.getName().equals(“foo”)}
![Page 75: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/75.jpg)
Sven Efftinge - itemis AG
Closure: Anonyme Funktion
• Ein Literal für Funktionen
• Speichert den Umgebenden Kontext und greift bei der Ausführung darauf zu
{Person p=>p.getName().equals(“foo”)}
Declared Parameters
![Page 76: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/76.jpg)
Sven Efftinge - itemis AG
Closure: Anonyme Funktion
• Ein Literal für Funktionen
• Speichert den Umgebenden Kontext und greift bei der Ausführung darauf zu
{Person p=>p.getName().equals(“foo”)}
Declared Parameters
Block or expression to be executed
![Page 77: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/77.jpg)
Sven Efftinge - itemis AG
Typische Higher-Order Functions auf Mengen
![Page 78: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/78.jpg)
Sven Efftinge - itemis AG
Typische Higher-Order Functions auf Mengen
• List<T> select({T => boolean} func)Gibt eine neue Liste, die nur die Werte enthält, für die die Funktion ‘true’ zurückgegeben hat.
![Page 79: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/79.jpg)
Sven Efftinge - itemis AG
Typische Higher-Order Functions auf Mengen
• List<T> select({T => boolean} func)Gibt eine neue Liste, die nur die Werte enthält, für die die Funktion ‘true’ zurückgegeben hat.
• List<R> collect({T => R} func)Sammelt die Rückgabewerte und gibt sie als Liste zurück
![Page 80: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/80.jpg)
Sven Efftinge - itemis AG
Typische Higher-Order Functions auf Mengen
• List<T> select({T => boolean} func)Gibt eine neue Liste, die nur die Werte enthält, für die die Funktion ‘true’ zurückgegeben hat.
• List<R> collect({T => R} func)Sammelt die Rückgabewerte und gibt sie als Liste zurück
• List<T> sort({T,T => int} func)Sortiert die Liste anhand einer Vergleichsfunktion (Comparator)
![Page 81: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/81.jpg)
Sven Efftinge - itemis AG
Typische Higher-Order Functions auf Mengen
• List<T> select({T => boolean} func)Gibt eine neue Liste, die nur die Werte enthält, für die die Funktion ‘true’ zurückgegeben hat.
• List<R> collect({T => R} func)Sammelt die Rückgabewerte und gibt sie als Liste zurück
• List<T> sort({T,T => int} func)Sortiert die Liste anhand einer Vergleichsfunktion (Comparator)
• boolean exists({T => boolean} func)Prüft, ob die Funktion für mindestens ein Element ‘true’ zurück gibt
![Page 82: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/82.jpg)
Sven Efftinge - itemis AG
Resourcehandling
![Page 83: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/83.jpg)
Sven Efftinge - itemis AG
Resourcehandling
FileInputStream input = new FileInputStream(fileName);try { // use input} finally { try { input.close(); } catch (IOException ex) { logger.log(Level.SEVERE, ex.getMessage(), ex); }}
![Page 84: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/84.jpg)
Sven Efftinge - itemis AG
Resourcehandling mit Closures
with(new FileInputStream(fileName), { in => // use input});
![Page 85: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/85.jpg)
Sven Efftinge - itemis AG
Resourcehandling mit Closureswith(new FileInputStream(fileName), { in => // use input});void with(FileInputStream in, {=> FileInputStream} block) { try { block.invoke(in); } finally { try { input.close(); } catch (IOException ex) { logger.log(Level.SEVERE, ex.getMessage(), ex); } }}
![Page 86: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/86.jpg)
Dynamic Dispatch / Multimethods
Visitors, switches, etc. adé
![Page 87: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/87.jpg)
Sven Efftinge - itemis AG
Polymorphismus in Java
class Foo { void doStuff() { System.out.println(“foo”); }} class SpecialFoo extends Foo { void doStuff() { System.out.println(“specialfoo”); }}
SpecialFoo
Foo
![Page 88: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/88.jpg)
Sven Efftinge - itemis AG
Polymorphismus in Java
class Foo { void doStuff() { System.out.println(“foo”); }} class SpecialFoo extends Foo { void doStuff() { System.out.println(“specialfoo”); }}
new SpecialFoo().doStuff(); ((Foo) new SpecialFoo()).doStuff();
SpecialFoo
Foo
![Page 89: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/89.jpg)
Sven Efftinge - itemis AG
Polymorphismus in Java
new SpecialFoo().doStuff(); ((Foo) new SpecialFoo()).doStuff();
SpecialFoo
Foooutput:specialfoospecialfoo
![Page 90: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/90.jpg)
Sven Efftinge - itemis AG
Polymorphismus in Java (2)
class Foo {} class SpecialFoo extends Foo {}static void doStuff(SpecialFoo arg) { System.out.println(“specialfoo”);}static void doStuff(Foo arg) { System.out.println(“foo”);}
![Page 91: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/91.jpg)
Sven Efftinge - itemis AG
Polymorphismus in Java (2)
class Foo {} class SpecialFoo extends Foo {}static void doStuff(SpecialFoo arg) { System.out.println(“specialfoo”);}static void doStuff(Foo arg) { System.out.println(“foo”);}
doStuff(new SpecialFoo()); doStuff((Foo) new SpecialFoo());
![Page 92: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/92.jpg)
Sven Efftinge - itemis AG
Polymorphismus in Java (2)
doStuff(new SpecialFoo()); doStuff((Foo) new SpecialFoo());
output:specialfoofoo
![Page 93: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/93.jpg)
Sven Efftinge - itemis AG
Mit Dynamic Dispatch in Java
doStuff(new SpecialFoo()); doStuff((Foo) new SpecialFoo();
output:specialfoospecialfoo
![Page 94: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/94.jpg)
Sven Efftinge - itemis AG
Dynamic Dispatch in Java (2)
class Foo { //.... public boolean equals(Object arg) { if (arg instanceof Foo) { Foo arg1 = (Foo) arg; return name.equals(arg.name); } return false; }}
![Page 95: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/95.jpg)
Sven Efftinge - itemis AG
Dynamic Dispatch in Java (2)
class Foo { //... public boolean equals(Foo arg) { return name.equals(arg.name); }}
![Page 96: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/96.jpg)
Sven Efftinge - itemis AG
Multimethod / Dynamic Dispatch
![Page 97: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/97.jpg)
Sven Efftinge - itemis AG
Multimethod / Dynamic Dispatch
• Non-Invasive und polymorphe Erweiterung von Typhierarchien
![Page 98: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/98.jpg)
Sven Efftinge - itemis AG
Multimethod / Dynamic Dispatch
• Non-Invasive und polymorphe Erweiterung von Typhierarchien
• Ersetzt das Visitor-Pattern
![Page 99: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/99.jpg)
Sven Efftinge - itemis AG
Multimethod / Dynamic Dispatch
• Non-Invasive und polymorphe Erweiterung von Typhierarchien
• Ersetzt das Visitor-Pattern
• Ersetzt viele ‘instanceof’ Abfragen
![Page 100: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/100.jpg)
Sven Efftinge - itemis AG
Multimethod / Dynamic Dispatch
• Non-Invasive und polymorphe Erweiterung von Typhierarchien
• Ersetzt das Visitor-Pattern
• Ersetzt viele ‘instanceof’ Abfragen
• Auch sehr nett in Kombination mit “Extension Methods”
foo.staticMethod() statt staticMethod(foo)
![Page 101: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/101.jpg)
Metaprogramming
Dynamischen Code in statische getypter Sprache?
![Page 102: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/102.jpg)
Sven Efftinge - itemis AG
Dynamische Programmierung
![Page 103: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/103.jpg)
Sven Efftinge - itemis AG
Dynamische Programmierung
• Inspektion
•Reflection API
![Page 104: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/104.jpg)
Sven Efftinge - itemis AG
Dynamische Programmierung
• Inspektion
•Reflection API
•Dynamisch Methoden aufrufen
•Reflection API -> Umständlich!
![Page 105: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/105.jpg)
Sven Efftinge - itemis AG
Dynamische Programmierung
• Inspektion
•Reflection API
•Dynamisch Methoden aufrufen
•Reflection API -> Umständlich!
•Dynamisch Klassen und Methoden ändern
![Page 106: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/106.jpg)
Sven Efftinge - itemis AG
Dynamische Programmierung
• Inspektion
•Reflection API
•Dynamisch Methoden aufrufen
•Reflection API -> Umständlich!
•Dynamisch Klassen und Methoden ändern
•Scripting
![Page 107: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/107.jpg)
Sven Efftinge - itemis AG
Dynamisch Methoden Aufrufen
public Object getName(Object myObj) { Class<?> myClass = myObj.getClass(); try { Method method = myClass.getMethod("getName"); return method.invoke(myObj); } catch (Exception e) { // handle exception } return null; }
In Java :
![Page 108: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/108.jpg)
Sven Efftinge - itemis AG
Dynamisch Methoden Aufrufen
public getName(Object myObj) { return myObj.getName(); }
In Groovy :
![Page 109: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/109.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
![Page 110: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/110.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
•Grundsätzlich sehr nützlich (Feedback!)
![Page 111: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/111.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
•Grundsätzlich sehr nützlich (Feedback!)
•Die Werkzeugunterstützung basiert darauf
![Page 112: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/112.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
•Grundsätzlich sehr nützlich (Feedback!)
•Die Werkzeugunterstützung basiert darauf
•Kein Widerspruch zu
![Page 113: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/113.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
•Grundsätzlich sehr nützlich (Feedback!)
•Die Werkzeugunterstützung basiert darauf
•Kein Widerspruch zu
•Kurzen Turn-Arounds
![Page 114: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/114.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
•Grundsätzlich sehr nützlich (Feedback!)
•Die Werkzeugunterstützung basiert darauf
•Kein Widerspruch zu
•Kurzen Turn-Arounds
•Interaktiver Entwicklung
![Page 115: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/115.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
![Page 116: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/116.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
•Kein Ersatz für Unittests
![Page 117: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/117.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
•Kein Ersatz für Unittests
•Erhöhte Komplexität
![Page 118: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/118.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
•Kein Ersatz für Unittests
•Erhöhte Komplexität
•statische vs. dynamische Typen
![Page 119: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/119.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
•Kein Ersatz für Unittests
•Erhöhte Komplexität
•statische vs. dynamische Typen
•Generics
![Page 120: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/120.jpg)
Sven Efftinge - itemis AG
Statische Typisierung
•Kein Ersatz für Unittests
•Erhöhte Komplexität
•statische vs. dynamische Typen
•Generics
•oft umständliche, generische Programmierung via Reflection
![Page 121: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/121.jpg)
Sven Efftinge - itemis AG
Warum nicht beides?
![Page 122: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/122.jpg)
Sven Efftinge - itemis AG
Warum nicht beides?
• Die allermeisten Codezeilen können sinnvoll statisch getypt werden
![Page 123: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/123.jpg)
Sven Efftinge - itemis AG
Warum nicht beides?
• Die allermeisten Codezeilen können sinnvoll statisch getypt werden
• Dynamische Programmierung eher in der Framework-Entwicklung
![Page 124: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/124.jpg)
Sven Efftinge - itemis AG
Warum nicht beides?
• Die allermeisten Codezeilen können sinnvoll statisch getypt werden
• Dynamische Programmierung eher in der Framework-Entwicklung
• z.B. durch explizite CompilerEscapes : foo.~unkownMethod()
![Page 125: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/125.jpg)
Sven Efftinge - itemis AG
Warum nicht beides?
• Die allermeisten Codezeilen können sinnvoll statisch getypt werden
• Dynamische Programmierung eher in der Framework-Entwicklung
• z.B. durch explizite CompilerEscapes : foo.~unkownMethod()
• Casts nicht im ByteCode
![Page 126: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/126.jpg)
Sven Efftinge - itemis AG
Warum nicht beides?
• Die allermeisten Codezeilen können sinnvoll statisch getypt werden
• Dynamische Programmierung eher in der Framework-Entwicklung
• z.B. durch explizite CompilerEscapes : foo.~unkownMethod()
• Casts nicht im ByteCode
• methodMissing() Methode auf java.lang.Object
![Page 127: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/127.jpg)
Sven Efftinge - itemis AG
Warum nicht beides?
• Die allermeisten Codezeilen können sinnvoll statisch getypt werden
• Dynamische Programmierung eher in der Framework-Entwicklung
• z.B. durch explizite CompilerEscapes : foo.~unkownMethod()
• Casts nicht im ByteCode
• methodMissing() Methode auf java.lang.Object
• Zur Laufzeit Methoden und Klassen hinzufügen
![Page 128: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/128.jpg)
Verschiedenes
![Page 129: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/129.jpg)
Sven Efftinge - itemis AG
Was nervt ...
![Page 130: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/130.jpg)
Sven Efftinge - itemis AG
Was nervt ...
•Checked Exceptions
![Page 131: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/131.jpg)
Sven Efftinge - itemis AG
Was nervt ...
•Checked Exceptions
•Native Datentypen
![Page 132: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/132.jpg)
Sven Efftinge - itemis AG
Was nervt ...
•Checked Exceptions
•Native Datentypen
•Switch statement
![Page 133: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/133.jpg)
Sven Efftinge - itemis AG
Was nervt ...
•Checked Exceptions
•Native Datentypen
•Switch statement
•Arrays
![Page 134: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/134.jpg)
Sven Efftinge - itemis AG
Was nervt ...
•Checked Exceptions
•Native Datentypen
•Switch statement
•Arrays
•Built-in Operatoren
![Page 135: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/135.jpg)
Sven Efftinge - itemis AG
Java ist super!
![Page 136: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/136.jpg)
Sven Efftinge - itemis AG
Java ist super!
•Open-Source Community
![Page 137: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/137.jpg)
Sven Efftinge - itemis AG
Java ist super!
•Open-Source Community
•Die Virtual Machine
![Page 138: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/138.jpg)
Sven Efftinge - itemis AG
Java ist super!
•Open-Source Community
•Die Virtual Machine
•Die Werkzeuge (insbesondere Eclipse)
![Page 139: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/139.jpg)
Sven Efftinge - itemis AG
Java ist super!
•Open-Source Community
•Die Virtual Machine
•Die Werkzeuge (insbesondere Eclipse)
•Einfachheit
![Page 140: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/140.jpg)
Sven Efftinge - itemis AG
Java ist super!
•Open-Source Community
•Die Virtual Machine
•Die Werkzeuge (insbesondere Eclipse)
•Einfachheit
•Statische Typisierung
![Page 141: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/141.jpg)
![Page 142: Vermisste Sprachfeatures in Java (german)](https://reader035.vdocuments.net/reader035/viewer/2022081602/5565fd0cd8b42aa6628b45a7/html5/thumbnails/142.jpg)
Vielen Dank für Ihre Aufmerksamkeit
Noch Fragen?