using lambdas to write mixins in java 8 wjax in... · 2020. 9. 7. · using lambdas to write mixins...
TRANSCRIPT
![Page 1: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/1.jpg)
Using Lambdas to Write Mixins in Java 8
Using Lambdas to Write Mixins in Java 8
Dr Heinz M. Kabutz [email protected]
Last updated 2015-11-04
© 2014-2015 Heinz Kabutz – All Rights Reserved
![Page 2: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/2.jpg)
Using Lambdas to Write Mixins in Java 8
Copyright Noticel© 2014-2015 Heinz Kabutz, All Rights Reserved
lNo part of this talk material may be reproduced without the express written permission of the author, including but not limited to: blogs, books, courses, public presentations.
lA license is hereby granted to use the ideas and source code in this course material for your personal and professional software development.
lPlease contact [email protected] if you are in any way uncertain as to your rights and obligations.
![Page 3: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/3.jpg)
Using Lambdas to Write Mixins in Java 8
Who is Heinz Kabutz?l Java consultant, instructor, programmer
– Born in Cape Town, Economic Migrant on Crete – Created The Java Specialists’ Newsletter
• www.javaspecialists.eu – One of the first Java Champions
• www.javachampions.com – Unfounder of hottest
Unconference JCrete (jcrete.org)
![Page 4: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/4.jpg)
Using Lambdas to Write Mixins in Java 8
Functional Interface
![Page 5: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/5.jpg)
Using Lambdas to Write Mixins in Java 8
Java 8 Lambda Syntax
lWith Java 8 Lambdas, it is a lot more succinct
public void greetConcurrent() { pool.submit(new Runnable() { public void run() { sayHello(); } }); } !
private void sayHello() { System.out.println("Kalamari!"); }
public void greetConcurrent() { pool.submit(() -> sayHello()); }
l In Java 7, we did this
![Page 6: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/6.jpg)
Using Lambdas to Write Mixins in Java 8
Functional Interfacel Lambdas have to be functional interfaces lDefinition: Functional Interface
– Interface – Exactly one abstract method
• Methods inherited from Object do not count
![Page 7: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/7.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Runnable { public abstract void run(); }
Is this a Functional Interface?
![Page 8: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/8.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Runnable { public abstract void run(); }
Yes it is!
Interface with exactly one abstract method
threadPool.submit(() -> sayHello());
![Page 9: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/9.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Callable<V> { V call() throws Exception; }
Is this a Functional Interface?
![Page 10: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/10.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Callable<V> { V call() throws Exception; }
Yes it is!
Like Runnable - single abstract method
![Page 11: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/11.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface ActionListener extends EventListener { public void actionPerformed(ActionEvent e); }
Is this a Functional Interface?
![Page 12: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/12.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface EventListener { }
We first need to look at EventListenerEventListener is not a Functional Interface
![Page 13: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/13.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface EventListener { } !
@FunctionalInterface public interface ActionListener extends EventListener { public void actionPerformed(ActionEvent e); }
Yes it is!ActionListener Interface has exactly one abstract method
![Page 14: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/14.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Stringer { // force class to implement toString() String toString(); }
Is this a Functional Interface?
![Page 15: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/15.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Stringer { // force class to implement toString() String toString(); }
No, it is not!
Public methods defined inside Object do not count
![Page 16: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/16.jpg)
Using Lambdas to Write Mixins in Java 8
public class Object { public final Class<?> getClass(); public int hashCode(); public boolean equals(Object obj); protected Object clone(); public String toString(); public final void notify(); public final void notifyAll(); public final void wait(long timeout); public final void wait(long timeout, int nanos); public final void wait(); protected void finalize(); }
Object RefresherWhich methods can we override? Which would be ignored in the functional interface method count?
![Page 17: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/17.jpg)
Using Lambdas to Write Mixins in Java 8
public final Class<?> getClass(); public final void notify(); public final void notifyAll(); public final void wait(long timeout); public final void wait(long timeout, int nanos); public final void wait(); !
Final methods cannot be added to interface
![Page 18: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/18.jpg)
Using Lambdas to Write Mixins in Java 8
!
public int hashCode(); public boolean equals(Object obj); public String toString();
Public non-final methods for functional interfaces
![Page 19: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/19.jpg)
Using Lambdas to Write Mixins in Java 8
protected void finalize(); protected Object clone();
Protected methods count for functional interfaces
![Page 20: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/20.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Foo1 { boolean equals(Object obj); }
Is Foo1 a Functional Interfaces?
![Page 21: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/21.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Foo1 { boolean equals(Object obj); }
Nope, Foo1 is not equals(Object) is already an implicit member
![Page 22: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/22.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Bar1 extends Foo1 { int compare(String o1, String o2); }
Is Bar1 a Functional Interfaces?
![Page 23: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/23.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Bar1 extends Foo1 { int compare(String o1, String o2); }
Indeed it is!Interface with exactly one abstract method
![Page 24: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/24.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Comparator<T> { public abstract boolean equals(Object obj); int compare(T o1, T o2); }
Is this a Functional Interface?
![Page 25: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/25.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface Comparator<T> { public abstract boolean equals(Object obj); int compare(T o1, T o2); }
Yes, it is! equals(Object) is already an implicit member
Interface with exactly one abstract method
![Page 26: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/26.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface CloneableFoo { int m(); Object clone(); }
And what about this?
![Page 27: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/27.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface CloneableFoo { int m(); Object clone(); }
No, it is not!
clone() is not public in Object
![Page 28: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/28.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface MouseListener extends EventListener { public void mouseClicked(MouseEvent e); public void mousePressed(MouseEvent e); public void mouseReleased(MouseEvent e); public void mouseEntered(MouseEvent e); public void mouseExited(MouseEvent e); }
Is this a Functional Interface?
![Page 29: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/29.jpg)
Using Lambdas to Write Mixins in Java 8
@FunctionalInterface public interface MouseListener extends EventListener { public void mouseClicked(MouseEvent e); public void mousePressed(MouseEvent e); public void mouseReleased(MouseEvent e); public void mouseEntered(MouseEvent e); public void mouseExited(MouseEvent e); }
No, it is not! MouseListener has five abstract methods
![Page 30: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/30.jpg)
Using Lambdas to Write Mixins in Java 8
Fundamental Functional Interfaces
![Page 31: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/31.jpg)
Using Lambdas to Write Mixins in Java 8
Fundamental Functional Interfacesl Java 8 contains some standard functional interfaces
– Supplier<T> – Consumer<T> – Predicate<T> – Function<T, R> – UnaryOperator<T> – BinaryOperator<T>
![Page 32: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/32.jpg)
Using Lambdas to Write Mixins in Java 8
Supplier<T>lUse whenever you want to supply an instance of a T
– Can delay object creation, for example:public void foo() { logger.fine("ms since 1970: " + System.currentTimeMillis());} public void bar() { logger.fine(() -> "ms since 1970: " + System.currentTimeMillis());}
public void fine(Supplier<String> msgSupplier) { log(Level.FINE, msgSupplier);}
![Page 33: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/33.jpg)
Using Lambdas to Write Mixins in Java 8
Consumer<T>lProvide an action to be performed on an objectCollection<String> names = Arrays.asList("Kirk", "Andrea", "Szonya", "Anna"); names.forEach(new Consumer<String>() { public void accept(String s) { System.out.println(s.toUpperCase()); }});
names.forEach(s -> System.out.println(s.toUpperCase()));
names.stream().map(String::toUpperCase).forEach(System.out::println);
![Page 34: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/34.jpg)
Using Lambdas to Write Mixins in Java 8
Predicate<T>lA boolean-valued property of an object
Collection<String> names = Arrays.asList("Heinz", "Helene", "Maxi", "Connie", "Bangie", "Efi"); names.removeIf(new Predicate<String>() { public boolean test(String s) { return s.contains("i"); }});
names.removeIf(s -> s.contains("i"));
![Page 35: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/35.jpg)
Using Lambdas to Write Mixins in Java 8
Function<T, R>l Transforming a T to an RCollection<String> names = Arrays.asList("Heinz", "Helene", "Maxi", "Connie", "Bangie", "Efi"); names.stream().map(new Function<String, Integer>() { public Integer apply(String s) { return s == null ? 0 : s.length(); }});
names.stream().mapToInt(s -> s == null ? 0 : s.length());
![Page 36: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/36.jpg)
Using Lambdas to Write Mixins in Java 8
UnaryOperator<T>l Transforming a T - similar to Function<T, T>
List<String> names = Arrays.asList("Heinz", "Helene", "Maxi", "Connie", "Bangie", "Efi"); names.replaceAll(new UnaryOperator<String>() { public String apply(String s) { return s.toUpperCase(); }});
names.replaceAll(s -> s.toUpperCase());
names.replaceAll(String::toUpperCase);
![Page 37: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/37.jpg)
Using Lambdas to Write Mixins in Java 8
Evils Of Method Overloading
![Page 38: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/38.jpg)
Using Lambdas to Write Mixins in Java 8
Evils of Method Overloadingl Java has always supported method overloading
– Methods can have the same name with different arguments – e.g. System.out.println(int/long/String/Object/etc.)
![Page 39: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/39.jpg)
Using Lambdas to Write Mixins in Java 8
Evils of Method Overloading in Java 5lWhat’s the output of new B().foo(42) ?
public class A { public void foo(Integer i) { System.out.println("foo(Integer) " + i); }} public class B extends A { public void foo(long l) { System.out.println("foo(long) " + l); }}
![Page 40: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/40.jpg)
Using Lambdas to Write Mixins in Java 8
Autoboxing Cannot Change SemanticslWhat’s the output of new B().foo(42) ?
public class A { public void foo(Integer i) { System.out.println("foo(Integer) " + i); }} public class B extends A { public void foo(long l) { System.out.println("foo(long) " + l); }}
foo(long)
![Page 41: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/41.jpg)
Using Lambdas to Write Mixins in Java 8
Functional Interfaces and OverloadinglWhich functional interface is used for lambda?
ExecutorService pool = Executors.newCachedThreadPool(); pool.submit(() -> System.out.println("Hallo München!"));
![Page 42: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/42.jpg)
Using Lambdas to Write Mixins in Java 8
Functional Interfaces and OverloadinglReturn type of void and no exceptions
ExecutorService pool = Executors.newCachedThreadPool(); pool.submit(() -> System.out.println("Hallo München!"));
Runnable
![Page 43: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/43.jpg)
Using Lambdas to Write Mixins in Java 8
Functional Interfaces and OverloadinglWhich functional interface is used now?ExecutorService pool = Executors.newCachedThreadPool(); pool.submit(() -> System.out.printf("Hallo %s!%n", "München"));
![Page 44: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/44.jpg)
Using Lambdas to Write Mixins in Java 8
Functional Interfaces and OverloadinglReturn type of System.out.printf() is PrintStream
Callable<PrintStream>
ExecutorService pool = Executors.newCachedThreadPool(); pool.submit(() -> System.out.printf("Hallo %s!%n", "München"));
![Page 45: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/45.jpg)
Using Lambdas to Write Mixins in Java 8
Functional Interfaces and OverloadinglAnd with this lambda?
ExecutorService pool = Executors.newCachedThreadPool(); pool.submit(() -> pool.awaitTermination(1, TimeUnit.DAYS));
![Page 46: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/46.jpg)
Using Lambdas to Write Mixins in Java 8
Functional Interfaces and Overloadingl awaitTermination() throws InterruptedException
and returns boolean
Callable<Boolean>
ExecutorService pool = Executors.newCachedThreadPool(); pool.submit(() -> pool.awaitTermination(1, TimeUnit.DAYS));
![Page 47: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/47.jpg)
Using Lambdas to Write Mixins in Java 8
Functional Interfaces and OverloadinglHow about this one? Runnable or Callable?
ExecutorService pool = Executors.newCachedThreadPool(); pool.submit(() -> TimeUnit.DAYS.sleep(1));
![Page 48: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/48.jpg)
Using Lambdas to Write Mixins in Java 8
Functional Interfaces and Overloadingl sleep() throws InterruptedException, returns void
Compiler error: Unhandled exception: java.lang.InterruptedException
ExecutorService pool = Executors.newCachedThreadPool(); pool.submit(() -> TimeUnit.DAYS.sleep(1));
![Page 49: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/49.jpg)
Using Lambdas to Write Mixins in Java 8
Forcing a particular lambda typel If we want to use the submit(Runnable) method
with a lambda that would typically be Callable – We could first write the lambda into a local variableRunnable job = () -> System.out.printf("Hallo %s!", "München");pool.submit(job); // uses Runnable
![Page 50: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/50.jpg)
Using Lambdas to Write Mixins in Java 8
Forcing a particular lambda typelWe could skip the local variable
– Careful if we want to inline that lambda
!
!
– This would not be correct - it would now be Callable
pool.submit((Runnable) () -> System.out.printf("Hallo %s!", "München"));
pool.submit(() -> System.out.printf("Hallo %s!", "München"));
![Page 51: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/51.jpg)
Using Lambdas to Write Mixins in Java 8
Forcing a particular lambda typelAlternatively, we can use a “Type Witness”
!
!
!
l This is the preferred approach!
pool.<Runnable>submit(() -> System.out.printf("Hallo %s!", "München"));
![Page 52: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/52.jpg)
Using Lambdas to Write Mixins in Java 8
Prefer Method References Over Lambdas
This one is controversial
![Page 53: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/53.jpg)
Using Lambdas to Write Mixins in Java 8
Prefer Method References over LambdaslOld-school iterationClass<?> clazz = String.class; for (Class<?> intf : clazz.getInterfaces()) { System.out.println(intf.getName());}
![Page 54: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/54.jpg)
Using Lambdas to Write Mixins in Java 8
Prefer Method References over LambdaslNewer internal iteration using stream with explicit
type for lambda parameter
Class<?> clazz = String.class; Stream.of(clazz.getInterfaces()) .forEach((Class<?> intf) -> System.out.println(intf.getName()));
![Page 55: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/55.jpg)
Using Lambdas to Write Mixins in Java 8
Prefer Method References over LambdaslNewer internal iteration using stream with
inferred type for lambda parameter
Class<?> clazz = String.class; Stream.of(clazz.getInterfaces()) .forEach(intf -> System.out.println(intf.getName()));
![Page 56: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/56.jpg)
Using Lambdas to Write Mixins in Java 8
Prefer Method References over LambdaslHowever, the forEach “Consumer” really does
two things: – Convert class to String with intf.getName() – Print String to console with System.out.println()
![Page 57: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/57.jpg)
Using Lambdas to Write Mixins in Java 8
Prefer Method References over LambdaslSplit into two separate actions, map and forEach
– But we have to think up useless names for parameters
Class<?> clazz = String.class; Stream.of(clazz.getInterfaces()) .map(intf -> intf.getName()) .forEach(name -> System.out.println(name));
![Page 58: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/58.jpg)
Using Lambdas to Write Mixins in Java 8
Prefer Method References over Lambdasl Instead, we can use Method References
– Needs some “getting used to” – Not liked by everyone - Stephen ColebourneClass<?> clazz = String.class; Stream.of(clazz.getInterfaces()) .map(Class::getName) .forEach(System.out::println);
![Page 59: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/59.jpg)
Using Lambdas to Write Mixins in Java 8
Mixins Using Java 8 Lambdas
![Page 60: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/60.jpg)
Using Lambdas to Write Mixins in Java 8
Mixins using Java 8 LambdaslState of the Lambda has this misleading example
!
!
!
!
lWith Java 8 Lambdas, this becomes !
lBut most AWT Listeners not functional interfaces
public interface ActionListener { void actionPerformed(ActionEvent e); }
button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ui.dazzle(e.getModifiers()); } });
button.addActionListener(e -> ui.dazzle(e.getModifiers()));
![Page 61: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/61.jpg)
Using Lambdas to Write Mixins in Java 8
salaryIncreaser.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { System.out.println("Almost there!"); } }); salaryIncreaser.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { e.consume(); System.out.println("Not quite!"); } }); salaryIncreaser.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent e) { shuffleSalaryButton(); } });
Pre-Lambda Event Listeners
![Page 62: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/62.jpg)
Using Lambdas to Write Mixins in Java 8
salaryIncreaser.addFocusGainedListener( e -> System.out.println("Almost there!") ); !
salaryIncreaser.addKeyPressedListener( e -> { e.consume(); System.out.println("Not quite!"); } ); !
salaryIncreaser.addMouseEnteredListener( e -> shuffleSalaryButton() );
This is What We Want
How do we get there?
![Page 63: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/63.jpg)
Using Lambdas to Write Mixins in Java 8Focus/Mouse/KeyListeners are not Functional Interfacesl They have several abstract methodspublic interface FocusListener { /** * Invoked when a component gains the keyboard focus. */ void focusGained(FocusEvent e); !
/** * Invoked when a component loses the keyboard focus. */ void focusLost(FocusEvent e); }
![Page 64: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/64.jpg)
Using Lambdas to Write Mixins in Java 8
FocusAdapterl In previous example, we used MouseAdapter,
FocusAdapter and KeyAdapter
public abstract class FocusAdapter implements FocusListener { public void focusGained(FocusEvent e) {} public void focusLost(FocusEvent e) {} }
![Page 65: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/65.jpg)
Using Lambdas to Write Mixins in Java 8
public interface FocusEventProducerMixin { void addFocusListener(FocusListener l);
FocusEventProducerMixin
!
default void addFocusLostListener(Consumer<FocusEvent> c) { addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent e) { c.accept(e); } }); } }
default void addFocusGainedListener(Consumer<FocusEvent> c) { addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { c.accept(e); } }); }
![Page 66: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/66.jpg)
Using Lambdas to Write Mixins in Java 8
What Just Happened?lWe defined an interface with default methods
– Both addFocusGainedListener() and addFocusLostListener() call the abstract method addFocusListener() in the interface
– It is a Functional Interface, but that does not matter in this case
l Let’s see how we can “mixin” this interface into an existing class JButton
![Page 67: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/67.jpg)
Using Lambdas to Write Mixins in Java 8
JButtonLambda Mixin Magicl JButton contains method addFocusListener lWe subclass it and implement Mixin interface
– We could even leave out the constructors and just have !
!
lWith our new JButtonLambda, we can now callsalaryIncreaser.addFocusGainedListener( e -> System.out.println("Almost there!") );
public class JButtonLambda extends JButton implements FocusEventProducerMixin { }
![Page 68: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/68.jpg)
Using Lambdas to Write Mixins in Java 8
public class JButtonLambda extends JButton implements FocusEventProducerMixin { public JButtonLambda() { } !
public JButtonLambda(Icon icon) { super(icon); } !
public JButtonLambda(String text) { super(text); } !
public JButtonLambda(Action a) { super(a); } !
public JButtonLambda(String text, Icon icon) { super(text, icon); } }
JButtonLambda
![Page 69: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/69.jpg)
Using Lambdas to Write Mixins in Java 8
Combining Different MixinslEach class in the hierarchy adds
new addXXXListener() methods – Here are just some of them
lWe can define a JComponent mixin that contains all the addXXXListener and other mixins in the classes above
ComponentaddFocusListener()addMouseListener()
ContaineraddContainerListener()
JComponentaddAncestorListener()
AbstractButtonaddItemListener()
JButtonJButton(text : String)
![Page 70: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/70.jpg)
Using Lambdas to Write Mixins in Java 8
public interface JComponentEventProducerMixin extends AncestorEventProducerMixin, ComponentEventProducerMixin, ContainerEventProducerMixin, FocusEventProducerMixin, HierarchyEventProducerMixin, InputMethodEventProducerMixin, KeyEventProducerMixin, MouseEventProducerMixin, MouseMotionEventProducerMixin { void addHierarchyListener(HierarchyListener l); void addMouseWheelListener(MouseWheelListener l); void addPropertyChangeListener(PropertyChangeListener l); void addVetoableChangeListener(VetoableChangeListener l); }
JComponent Mixin
![Page 71: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/71.jpg)
Using Lambdas to Write Mixins in Java 8
public interface AbstractButtonEventProducerMixin { void addActionListener(ActionListener l); void addItemListener(ItemListener l); void addChangeListener(ChangeListener l); }
AbstractButton Mixin
We need this so that we have a common super-interface that we can cast all types of abstract buttons to.
![Page 72: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/72.jpg)
Using Lambdas to Write Mixins in Java 8
public class JButtonLambda extends JButton implements JComponentEventProducerMixin, AbstractButtonEventProducerMixin { public JButtonLambda() { } // and other constructors }
JButton using JComponent Mixins
![Page 73: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/73.jpg)
Using Lambdas to Write Mixins in Java 8
ComponentPallet Demo
![Page 74: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/74.jpg)
Using Lambdas to Write Mixins in Java 8
Facade Pattern For Listeners
![Page 75: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/75.jpg)
Using Lambdas to Write Mixins in Java 8
Facade Pattern for ListenerslAnother approach is facades for each listenerpublic interface FocusListeners { static FocusListener forFocusGainedListener( Consumer<FocusEvent> c) { return new FocusAdapter() { public void focusGained(FocusEvent e) {c.accept(e);} }; } static FocusListener forFocusLostListener( Consumer<FocusEvent> c) { return new FocusAdapter() { public void focusLost(FocusEvent e) { c.accept(e); } }; } }
![Page 76: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/76.jpg)
Using Lambdas to Write Mixins in Java 8
Facade Pattern for ListenerssalaryIncreaser.addFocusListener( FocusListeners.forFocusGainedListener( e -> System.out.println("Almost there!"))); !
salaryIncreaser.addKeyListener( KeyListeners.forKeyPressedListener( e -> { e.consume(); System.out.println("Not quite!"); })); !
salaryIncreaser.addMouseListener( MouseListeners.forMouseEntered( e -> shuffleSalaryButton()));
![Page 77: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/77.jpg)
Using Lambdas to Write Mixins in Java 8
Method Call StacksBonus material (if we have time)
![Page 78: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/78.jpg)
Using Lambdas to Write Mixins in Java 8
Method Call Stacks
private void showStack() { Thread.dumpStack();} private void anonymousClassCallStack() { Runnable runnable = new Runnable() { public void run() { showStack(); } }; runnable.run();}
lAnonymous inner classes use synthetic static methods to access private members
![Page 79: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/79.jpg)
Using Lambdas to Write Mixins in Java 8
Method Call StackslOutput of run
java.lang.Exception: Stack trace at java.lang.Thread.dumpStack(Thread.java:1329) at MethodCallStack.showStack(MethodCallStack.java:3) at MethodCallStack.access$000(MethodCallStack.java:1) at MethodCallStack$1.run(MethodCallStack.java:9) at MethodCallStack.anonymousClassCallStack(MethodCallStack.java:12)
static void MethodCallStack.access$000(MethodCallStack)
lSynthetic method in MethodCallStack.class
![Page 80: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/80.jpg)
Using Lambdas to Write Mixins in Java 8
Method Call Stacks
public void lambdaCallStack() { Runnable runnable = () -> showStack(); runnable.run();}
l Lambdas have more direct access to outer class
java.lang.Exception: Stack trace at java.lang.Thread.dumpStack(Thread.java:1329) at MethodCallStack.showStack(MethodCallStack.java:3) at MethodCallStack.lambda$lambdaCallStack$0(MethodCallStack.java:16) at MethodCallStack$$Lambda$1/455659002.run(Unknown Source) at MethodCallStack.lambdaCallStack(MethodCallStack.java:17)
private void MethodCallStack.lambda$lambdaCallStack$0()
lSynthetic λ method in MethodCallStack.class
![Page 81: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/81.jpg)
Using Lambdas to Write Mixins in Java 8
Conclusion
![Page 82: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/82.jpg)
Using Lambdas to Write Mixins in Java 8
Mixins in GitHublCode with more details available here
– https://github.com/kabutz/javaspecialists-awt-event-mixins • (http://tinyurl.com/jmixins)
![Page 83: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/83.jpg)
Using Lambdas to Write Mixins in Java 8
Lambdas, Static and Default Methodsl Java 8 released in March 2014 lPractical use of language is producing idioms lMixin idea can be applied in other contexts too
– e.g. Adding functionality to Enums
lA lot of my customers are moving to Java 8 – Some concurrency constructs like ReentrantLock have
fewer bugs in Java 8
![Page 84: Using Lambdas to Write Mixins in Java 8 WJAX in... · 2020. 9. 7. · Using Lambdas to Write Mixins in Java 8 Who is Heinz Kabutz? lJava consultant, instructor, programmer – Born](https://reader035.vdocuments.us/reader035/viewer/2022081516/60263093033bb96fbd23fe64/html5/thumbnails/84.jpg)
Using Lambdas to Write Mixins in Java 8
Using Lambdas to Write Mixins in Java 8
Dr Heinz M. Kabutz [email protected]