Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Prochain SlideShare
What to Upload to SlideShare
Suivant
Télécharger pour lire hors ligne et voir en mode plein écran

0

Partager

Télécharger pour lire hors ligne

Вещи в Java, о которых вы (возможно) не знали

Télécharger pour lire hors ligne

8 вещей в Java, о которых вы возможно не знали

Livres associés

Gratuit avec un essai de 30 jours de Scribd

Tout voir
  • Soyez le premier à aimer ceci

Вещи в Java, о которых вы (возможно) не знали

  1. 1. Вещи в Java, о которых вы не знали Евгений Козлов, 17.11.2017
  2. 2. Вещи в Java, о которых вы (возможно) не знали Евгений Козлов, 17.11.2017
  3. 3. #1. Что выведет данный код? System.out.println(5);
  4. 4. #1. Что выведет данный код? System.out.println((Integer) 5);
  5. 5. #1. Что выведет данный код? Class<?> c = Class.forName("java.lang.Integer$IntegerCache"); Field cache = c.getDeclaredField("cache"); cache.setAccessible(true); Integer[] array = (Integer[]) cache.get(null); array[133] = 6;
  6. 6. #2. Non-denotable types
  7. 7. #2. Non-denotable types • Non-denotable type – это тип, который нельзя выразить в языке Java
  8. 8. Union type
  9. 9. Union type try { … } catch (IOException | SQLException e) { … }
  10. 10. Union type interface ErrorCode { int getErrorCode(); } class Exception1 extends Exception implements ErrorCode { … } class Exception2 extends Exception implements ErrorCode { … }
  11. 11. Union type try { … } catch (Exception1 | Exception2 e) { System.out.println(e.getErrorCode()); }
  12. 12. Intersection type
  13. 13. Intersection type interface Foo { void foo(); } interface Bar { void bar(); } public <T extends Foo & Bar> void f(T t) { t.foo(); t.bar(); }
  14. 14. Intersection type Arrays.asList(1, 2, "three") .forEach(e -> { … }); e : Serializable & Comparable<…>
  15. 15. Intersection type List<Object> list = … list.stream() .map(e → (Foo & Bar) e) .forEach(e → { e.foo(); e.bar(); });
  16. 16. Anonymous class new Object() { int x; int y; }
  17. 17. Anonymous class public <T> f(T t) { return t; } int x = f(new Object() { int x = 1; }).x
  18. 18. Anonymous class Stream<String> stream = Stream.of("hello", "world!"); Map<Integer, String> map = stream .map(s → new Object() { int key = s.length(); String value = s; }) .collect(Collectors.toMap( t → t.key, t → t.value));
  19. 19. #3. Receiver parameter
  20. 20. #3. Receiver parameter class Currency { String getName() { … } }
  21. 21. #3. Receiver parameter class Currency { String getName(Currency this) { … } }
  22. 22. #3. Receiver parameter class Currency implements Comparable<Currency> { int compareTo(Currency this, Currency that) { … } }
  23. 23. #3. Receiver parameter class Currency implements Comparable<Currency> { int compareTo(@Param Currency this, @Param Currency that) { … } }
  24. 24. #3. Receiver parameter public class List<any T> { public int sum(List<int> this) { … } } List.of(1, 2, 3).sum();
  25. 25. #4. Как получить имена параметров метода через reflection?
  26. 26. #4. Как получить имена параметров метода через reflection? • Method.getParameters() • Появилось в Java 8 • Нужна опция javac -parameters
  27. 27. #5. Как ускорить рефлексию? public class Incrementor { public static int inc(int i) { return i + 1; } }
  28. 28. #5. Как ускорить рефлексию? Method method = Incrementor.class .getMethod("inc", int.class); int result = (int) method.invoke(null, 3);
  29. 29. #5. Как ускорить рефлексию? Method method = Incrementor.class .getMethod("inc", int.class); MethodHandle methodHandle = MethodHandles.lookup() .unreflect(method); int result = (int) methodHandle .invokeExact(3)
  30. 30. #6. Финализация public class App { public static void main(String[] args) { new App(); System.gc(); } @Override protected void finalize() throws Throwable { System.out.println("Finalizing"); } }
  31. 31. #6. Финализация public class App { public static void main(String[] args) { new App(); System.gc(); } @Override protected void finalize() throws Throwable { System.out.println("Finalizing"); } }
  32. 32. #6. Финализация • java.lang.ref.Cleaner
  33. 33. #6. Финализация public class App { private static final Cleaner CLEANER = Cleaner.create(); public static void main(String[] args) { CLEANER.register(new App(), () -> { System.out.println("Cleaning..."); }); System.gc(); System.out.println("Program finished"); } }
  34. 34. #6. Финализация в Java 6, 7, 8 com.google.common.base.FinalizablePhantomReference<T> и com.google.common.base.FinalizableReferenceQueue
  35. 35. #7. Логирование в Java 9
  36. 36. #7. Логирование в Java 9 System.Logger
  37. 37. #8. IOException в лямбдах List<byte[]> collect = Stream.of( "file1.txt", "file2.txt", "file3.txt") .map(Paths::get) .map(path → Files.readAllBytes(path)); .collect(Collectors.toList());
  38. 38. #8. IOException в лямбдах List<byte[]> collect = Stream.of( "file1.txt", "file2.txt", "file3.txt") .map(Paths::get) .map(path → Files.readAllBytes(path)); .collect(Collectors.toList());
  39. 39. #8. IOException в лямбдах List<byte[]> collect = Stream.of( "file1.txt", "file2.txt", "file3.txt") .map(Paths::get) .map(path → { try { Files.readAllBytes(path)); } catch (IOException e) { throw new UncheckedIOException(e); } }) .collect(Collectors.toList());

8 вещей в Java, о которых вы возможно не знали

Vues

Nombre de vues

310

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

8

Actions

Téléchargements

1

Partages

0

Commentaires

0

Mentions J'aime

0

×