Your SlideShare is downloading. ×
0
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Présentation nouveauté java7
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Présentation nouveauté java7

837

Published on

Clairement dans cette version, nous assistons à une volonté de simplification. Plus de lisibilité du code, plus d’outils pour ne plus avoir à perdre de temps sur des opérations simples et courantes, …

Clairement dans cette version, nous assistons à une volonté de simplification. Plus de lisibilité du code, plus d’outils pour ne plus avoir à perdre de temps sur des opérations simples et courantes, pour au final un code de meilleur qualité et plus accessible. La plupart de ces améliorations se trouvent dans cette présentation.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
837
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
19
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Les Nouveautés du JAVA 7 Réalisé par Aziz GHABRY
  • 2. Modularité du JavaSwingTypes et génériquesNIO 2Support natif XMLSupport des propriétés JavaBeanClosures - abstractionAPI Date & TimeUnits & QuantitiesJMX 2.0Javadoc
  • 3. Java Modularity• Superpackages (JSR 294)• Java Module System (JSR 277)• Java Kernel (no JSR)
  • 4. Superpackages• définit un module de développement constitué de packages.• Indique les packages qui sont exportés.
  • 5. Superpackages (JSR 294)src/com/foo/super-package.java:superpackage com.foo { member package com.foo.api, com.foo.model, com.foo.util; export com.foo.api; // Make api package public}
  • 6. Java Module System (JSR 277)  Format de distribution de déploiement du module  Versioning et dépendance  Dépôt API  L’appui dexécution dans le lanceur / classloaders
  • 7. Module Definition Metadata– /MODULE-INF/METADATA.module:– name=com.wombat.webservice– extensible-metadata=[@Version(”1.0”)]– members=[com.wombat.webservice.MainApp,– com.wombat.webservice.PrivateClassA,– com.wombat.webservice.PrivateInterfaceB]– imports=[ImportModule(org.foo.xml, @VersionConstraint(”1.3.0”)),– ImportModule(org.foo.soap, @VersionConstraint(”2.0.0+”))]– class-exports=[com.wombat.webservice.MainApp]
  • 8. Java Kernel• Réorganiser JRE dans le noyau + modules optionnels, charger dynamiquement• Concurrence avec Flex, Silverlight
  • 9. Améliorations de Swing• Swing Application Framework (JSR 296)• Bean Binding Framework (JSR 295)• Bean Validation Framework (JSR 303)
  • 10. Swing Application Framework JSR 296 Action Application Application @Action Manager ActionMapinitialize(String[] args)startup()shutdown() Resource Resource Resourceexit() Manager Map Converter SingleFrame Session Appliction Storage Local Storage SwingWorker ApplicationContext Task * TaskService TaskgetInstance() Monitor
  • 11. Bean Binding Framework JSR 295• Utilisez une Binding pour lier les propriétés de deux beans:Binding binding = new Binding(source, "sourcePath", target, "targetPath");binding.bind();• Une fois lié, les changements de chaque source ou cible sont envoyés vers lautre.• Changements passer par un BindingConverter et un BindingValidator le long du chemin.• Le langage dexpression JSP (EL) est utilisé pour spécifier les conversions.
  • 12. Bean Validation JSR 303• Voici un exemple de Hibnerate Validator qui peut être évocateur:public class Address { @NotNull private String line1; private String line2; private String zip; private String state; @Length(max = 20) @NotNull private String country; @Range(min = -2, max = 50, message = "Floor out of range") public int floor;}
  • 13. Choix des Genericsclass NewCollection<class E> extends Collection<E> { ... }class NewList<class E> extends NewCollection<E>, List<E> { ... }
  • 14. Annotations sur types JSR 308• pour les arguments de type générique à des classes paramétrées: Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;• pour les arguments de type générique à une méthode générique ou dinvocation du constructeur: o.<@NonNull String>m("...");• Pour paramètres de type bounds et wildcards: class Folder<F extends @Existing File> { ... } Collection<? super @Existing File>• pour lhéritage de classe : class UnmodifiableList<T> implements @Readonly List<@Readonly T> { ... }• Pour les clauses throws : void monitorTemperature() throws @Critical TemperatureException { ... }• Pour les conversions de type : myString = (@NonNull String) myObject;• Pour les types du test: boolean isNonNull = myString instanceof @NonNull String;• Pour la création des objets: new @NonEmpty @Readonly List<String>(myNonEmptyStringSet)
  • 15. Création dune instance raccourciepublic static void main(String[] args) { map := new HashMap<String, Integer>(); for(word : args) { freq := map.get(word); map.put(word, (freq==null) ? 1 : freq+1); } System.out.println(map); }public static void main(String[] args) { final map = new HashMap<String, Integer>(); for(final word : args) { final freq = map.get(word); map.put(word, (freq==null) ? 1 : freq+1); } System.out.println(map); }
  • 16. NIO 2 (JSR 203)• Les principales caractéristiques : – Nouvelle interface filesystem • Permissions • Les attributs de fichiers • Implémentations débrochables • Échapper vers les spécifications de l’API filesystem – API pour E/S asynchrones sur les sockets et les fichiers – La réalisation de canaux socket (multicast, options, etc)
  • 17. NIO 2 – File System API Closeable WatchService WatchEvent WatchKey Watchable Files FileId FileSystems FileSystem FileReference Directory FileSystem Provider BackingFile PathReference Path System FileSystemAttributeView File DiskSpaceAttributeView
  • 18. NIO 2: Copie dun fichierPathReference source = PathReference.from(“spongebob.jpg”);PathReference target = PathReference.from(“squarepants.jpg”);int flags = CopyFlag.COPY_ATTRIBUTES | CopyFlag.REPLACE_EXISTING;source.copyTo(target, flags);
  • 19. NIO 2 – Accès permissions sur les fichiersPathReference ref = PathReference.from("foo.txt");PosixFileAttributeView view = ref.newFileAttributeView(PosixFileAttributeView.class);PosixFileAttributes attrs = view.readAttributes();int perms = attrs.getPermissions();// prints "-rw-r--r-- alice bandits"System.out.format("%st%st%s%n", PosixFilePermission.toString(perms), attrs.getOwner(), attrs.getGroup());// deny othersperms &= ~OTHERS_READ & ~OTHERS_WRITE & ~OTHERS_EXECUTE;view.updatePermissions(perms);// change groupUserPrincipal cops = view.lookupPrincipalByGroupName("cops");view.updateOwners(null, cops);
  • 20. Type XML: Constructionvoid addReviewer(XML feature, String reviewer, String time) { feature.add(<reviewed> <who>{ reviewer }</who> <when>{ time }</when> </reviewed>);}
  • 21. Type XML: Codeur des donnéespackage java.xml;abstract class DataCoder { String encode(Object o); String encode(Object o, String type); <T> T decode(String data, Class<T> c); <T> T decode(String data, Class<T> c, String type); boolean supports(Class<?> c); boolean supports(Class<?> c, String type); static final DataCoder JAVA; static final DataCoder XSD;}
  • 22. Type XML: Exemple Datacodervoid addReviewer(XML feature, String reviewer, Timestamp time) { DataCoder dc = DataCoder.XSD; feature.add(<reviewed> <who>{ reviewer }</who> <when>{ dc.encode(time) }</when> </reviewed>);}
  • 23. Type XML: Navigationvoid rejectOpenFeatures(XML featureList) { List<XML> fs = featureList.findAll( “feature[state!=„approved‟]”); for(XML f : fs) { f.get(“state”).set(“rejected”); }}
  • 24. Support des propriétés JavaBeanProposition de nouveau mot-clé :public class Point { property double x; property double y;}Point p = new Point(1, 2);System.out.println(p.x + " " + p.y);Nouvelle proposition de la syntaxe daccesseur:Point p = new Point();p->X = 56;p->Y = 87;int z = p->X;
  • 25. Closures - abstractionClosures :Commencer à penser à eux comme des blocs de code, vous pouvez passer autour et invoquer plus tard.Peut déjà le faire en Java avec les classes internes ou des objets de la méthodevoid validateWithMax(Stat[] stats, final int max) throws InvalidStatException { for(Stat stat : stats) { if(! (stat.value() <= max)) { throw new InvalidStatException(); } } } void validateWithMin(Stat[] stats, final int min) throws InvalidStatException { for(Stat stat : stats) { if(! (stat.value() >= min)) { throw new InvalidStatException(); } } }
  • 26. Closures– Inner Classesvoid validateWithMax(Stat[] stats, final int max) throws InvalidStatException { validate( stats, new Validator() { public boolean isValid(Stat stat) { return stat.value() <= max; } } ); }void validateWithMin(Stat[] stats, final int min) throws InvalidStatException { validate( stats, new Validator() { public boolean isValid(Stat stat) { return stat.value() >= min; } } ); }interface Validator { boolean isValid(Stat stat); }void validate(Stat[] stats, Validator validator) { for(Stat stat : stats) { if(! validator.isValid(stat)) { throw new InvalidStatException(); } }}
  • 27. Les propositions des Closures• BGGA – Gilad Bracha, Neal Gafter, James Gosling, Peter von der Ahe• CICE – “Concise Instance Creation Expressions” – Josh Bloch, Bob Lee, Doug Lea• FCM – “First Class Methods” / JCA “Java Control Abstraction” – Stephen Colebourne, Stefan Schulz, Ricky Clarkson
  • 28. Closures - CICEvoid validateWithMax(Stat[] stats, int max) throws InvalidStatException { validate( stats, Validator(Stat stat) { return stat.value() <= max; } ); }• Linterface Validator et méthode validate () sont inchangés.
  • 29. Closures - BGGAvoid validateWithMax(Stat[] stats, int max) throws InvalidStatException { validate(stats, {Stat stat => stat.value() <= max });}void validate(Stat[] stats, {Stat stat => boolean} block) { for(Stat stat : stats) { if(! block.invoke(stat)) { throw new InvalidStatException(); } }}
  • 30. Closures - FCMvoid validateWithMax(Stat[] stats, final int max) throws InvalidStatException { validate( stats, #(boolean(Stat stat)) { return stat.value() <= max; } );}void validate(Stat[] stats, #(boolean(Stat)) block) { for(Stat stat : stats) { if(! block.invoke(stat)) { throw new InvalidStatException(); } }}
  • 31. Closures– structures de contrôle File file = ...; FileReader reader = null; try { reader = new FileReader(file); reader.read… } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { // ignore } }
  • 32. Closures - JCAFile file = ...;usingFileReader(FileReader reader : file) { reader.read…}public static void usingFileReader(#(void(FileReader)) block : File file) throws IOException { FileReader reader = null; try { reader = new FileReader(file); block.invoke(reader); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { } }}- cest la définition de type de bloc, variables passées dans le bloc- Passer des variables nécessaires par le bloc dans la méthode invoke
  • 33. Closures - BGGAFile file = ...;usingFileReader(FileReader reader : file) { reader.read…}public static <T,throws E extends Exception>T usingFileReader(File file, {=>T throws E} block) throws E { FileReader reader = null; try { reader = new FileReader(file); return block.invoke(reader); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { } }}• La syntaxe BGGA est beaucoup plus compliquée car elle est la manipulation à la fois la syntaxe et la syntaxe avant labstraction de contrôle.• Avoir à gérer cas dexception, mais fondamentalement semblable dans son concept
  • 34. API Date / Time• Correction des APIs existantes date/heure• Problèmes heure dété• Threads DateTimeFormat• Mutabilité Date/Calendar• Manque des classes interval/duration• Basé sur JodaTime• Analyse, de mise en forme, larithmétique, etc
  • 35. Units and Quantities (JSR 275) Unit UnitFormatter SI NonSI BaseUnit DerivedUnit Dimension ProductUnit AlternateUnit TransformedUnit Converter MultiplyConverter AddConverter LogConverter
  • 36. Exemples des Unités // Conversion entre les unités.KILO(METER).getConverterTo(MILE).convert(10)• 6.2137119223733395// Récupération de lunité système (identifie le type de mesure).REVOLUTION.divide(MINUTE).getSystemUnit()• rad/s// Vérifier la dimensionELECTRON_VOLT.isCompatible(WATT.times(HOUR))• true// Récupération de dimension unitaire (dépend du modèle actuel).ELECTRON_VOLT.getDimension()• [L]²·[M]/[T]²
  • 37. JMX (Java Management Extensions) • JMX 2.0 (JSR 255) – Rénovation avec les types génériques – Utilisation les annotations – Faire MBeans ouverts facile à utiliser – Généraliser les moniteurs pour supporter types complexes – serveurs Mbean Cascade/fédéré – Les connecteurs services Web (JSR 262)
  • 38. Javadoc (JSR 260)• De nouvelles étiquettes pour des exemples,• Catégorisations nouveaux types de méthodes, propriétés de bean, etc• Mettre à jour le look old school
  • 39. Autres..• Support des opérateurs numérique pour le type BigDecimal BigDecimal a = … BigDecimal b = … BigDecimal s = a + b;• Comparaisons de chaines de caractères dans la clause switch: switch(stooge) { case ‘Moe’: …• Comparaison pour les énumérations JACK < QUEEN
  • 40. Merci pour votre attention

×