![Page 1: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/1.jpg)
Interfaces and Lambda Expressions
Prof. Michele Loreti
Programmazione AvanzataCorso di Laurea in Informatica (L31)Scuola di Scienze e Tecnologie
Prof. Michele Loreti Interfaces and Lambda Expressions 115 / 143
![Page 2: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/2.jpg)
Interfaces and Lambda expressions
Interfaces are a key feature of object-oriented programming. . .
. . . they specify what should be done
. . . without having to provide an implementation.
Recently functional programming has risen in importance because it is wellsuited for concurrent and event-driven programming.
Java integrates aspects of functional programming in the object-orientedapproach.
Prof. Michele Loreti Interfaces and Lambda Expressions 116 / 143
![Page 3: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/3.jpg)
Interfaces and Lambda expressions
Interfaces are a key feature of object-oriented programming. . .
. . . they specify what should be done
. . . without having to provide an implementation.
Recently functional programming has risen in importance because it is wellsuited for concurrent and event-driven programming.
Java integrates aspects of functional programming in the object-orientedapproach.
Prof. Michele Loreti Interfaces and Lambda Expressions 116 / 143
![Page 4: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/4.jpg)
Interfaces and Lambda expressions
Interfaces are a key feature of object-oriented programming. . .
. . . they specify what should be done
. . . without having to provide an implementation.
Recently functional programming has risen in importance because it is wellsuited for concurrent and event-driven programming.
Java integrates aspects of functional programming in the object-orientedapproach.
Prof. Michele Loreti Interfaces and Lambda Expressions 116 / 143
![Page 5: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/5.jpg)
Interfaces and Lambda expressions
Interfaces are a key feature of object-oriented programming. . .
. . . they specify what should be done
. . . without having to provide an implementation.
Recently functional programming has risen in importance because it is wellsuited for concurrent and event-driven programming.
Java integrates aspects of functional programming in the object-orientedapproach.
Prof. Michele Loreti Interfaces and Lambda Expressions 116 / 143
![Page 6: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/6.jpg)
Interfaces and Lambda expressions
Interfaces are a key feature of object-oriented programming. . .
. . . they specify what should be done
. . . without having to provide an implementation.
Recently functional programming has risen in importance because it is wellsuited for concurrent and event-driven programming.
Java integrates aspects of functional programming in the object-orientedapproach.
Prof. Michele Loreti Interfaces and Lambda Expressions 116 / 143
![Page 7: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/7.jpg)
Interaces
An interface is a mechanism for spelling out a contract between twoparties:
� the supplier of a service;
� the classes that want their objects to be usable with the service.
Example: Consider a service that works on sequences of integers,reporting the average of the first n values:
p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n )
Such sequence can take many forms!
Prof. Michele Loreti Interfaces and Lambda Expressions 117 / 143
![Page 8: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/8.jpg)
Interaces
An interface is a mechanism for spelling out a contract between twoparties:
� the supplier of a service;
� the classes that want their objects to be usable with the service.
Example: Consider a service that works on sequences of integers,reporting the average of the first n values:
p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n )
Such sequence can take many forms!
Prof. Michele Loreti Interfaces and Lambda Expressions 117 / 143
![Page 9: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/9.jpg)
Interaces
An interface is a mechanism for spelling out a contract between twoparties:
� the supplier of a service;
� the classes that want their objects to be usable with the service.
Example: Consider a service that works on sequences of integers,reporting the average of the first n values:
p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n )
Such sequence can take many forms!
Prof. Michele Loreti Interfaces and Lambda Expressions 117 / 143
![Page 10: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/10.jpg)
Interaces
An interface is a mechanism for spelling out a contract between twoparties:
� the supplier of a service;
� the classes that want their objects to be usable with the service.
Example: Consider a service that works on sequences of integers,reporting the average of the first n values:
p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n )
Such sequence can take many forms!
Prof. Michele Loreti Interfaces and Lambda Expressions 117 / 143
![Page 11: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/11.jpg)
Interaces
An interface is a mechanism for spelling out a contract between twoparties:
� the supplier of a service;
� the classes that want their objects to be usable with the service.
Example: Consider a service that works on sequences of integers,reporting the average of the first n values:
p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n )
Such sequence can take many forms!
Prof. Michele Loreti Interfaces and Lambda Expressions 117 / 143
![Page 12: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/12.jpg)
Interfaces at work
For a sequence of integers we have to consider, at least, two methods:
� test if there is another element in the list;
� get the next element.
These informal descriptions allow us to derive the following interface:
p u b l i c i n t e r f a c e I n t S e q u e n c e {b o o l e a n hasNext ( ) ;i n t n e x t ( ) ;
}
Prof. Michele Loreti Interfaces and Lambda Expressions 118 / 143
![Page 13: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/13.jpg)
Interfaces at work
For a sequence of integers we have to consider, at least, two methods:
� test if there is another element in the list;
� get the next element.
These informal descriptions allow us to derive the following interface:
p u b l i c i n t e r f a c e I n t S e q u e n c e {b o o l e a n hasNext ( ) ;i n t n e x t ( ) ;
}
Prof. Michele Loreti Interfaces and Lambda Expressions 118 / 143
![Page 14: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/14.jpg)
Interfaces at work
For a sequence of integers we have to consider, at least, two methods:
� test if there is another element in the list;
� get the next element.
These informal descriptions allow us to derive the following interface:
p u b l i c i n t e r f a c e I n t S e q u e n c e {b o o l e a n hasNext ( ) ;i n t n e x t ( ) ;
}
Prof. Michele Loreti Interfaces and Lambda Expressions 118 / 143
![Page 15: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/15.jpg)
Interfaces at work
For a sequence of integers we have to consider, at least, two methods:
� test if there is another element in the list;
� get the next element.
These informal descriptions allow us to derive the following interface:
p u b l i c i n t e r f a c e I n t S e q u e n c e {b o o l e a n hasNext ( ) ;i n t n e x t ( ) ;
}
Prof. Michele Loreti Interfaces and Lambda Expressions 118 / 143
![Page 16: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/16.jpg)
Interfaces at work
This interface allow us to implement method average:
p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n ) {i n t count = 0 ;d o u b l e sum = 0 ;w h i l e ( seq . hasNext ( ) && count<n ) {
count++;sum += seq . n e x t ( ) ;
}r e t u r n count == 0 ? 0 : sum/ count ;
}
We don’t know the exact implementation of IntSequence!
Prof. Michele Loreti Interfaces and Lambda Expressions 119 / 143
![Page 17: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/17.jpg)
Interfaces at work
This interface allow us to implement method average:
p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n ) {i n t count = 0 ;d o u b l e sum = 0 ;w h i l e ( seq . hasNext ( ) && count<n ) {
count++;sum += seq . n e x t ( ) ;
}r e t u r n count == 0 ? 0 : sum/ count ;
}
We don’t know the exact implementation of IntSequence!
Prof. Michele Loreti Interfaces and Lambda Expressions 119 / 143
![Page 18: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/18.jpg)
Interfaces at work
This interface allow us to implement method average:
p u b l i c s t a t i c d o u b l e a v e r a g e ( I n t S e q u e n c e seq , i n t n ) {i n t count = 0 ;d o u b l e sum = 0 ;w h i l e ( seq . hasNext ( ) && count<n ) {
count++;sum += seq . n e x t ( ) ;
}r e t u r n count == 0 ? 0 : sum/ count ;
}
We don’t know the exact implementation of IntSequence!
Prof. Michele Loreti Interfaces and Lambda Expressions 119 / 143
![Page 19: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/19.jpg)
Implementing an Interface
The classes that want to be usable with the average method mustimplement the IntSequence interface
p u b l i c c l a s s SquareSequence implements I n t S e q u e n c e {
p r i v a t e i n t i =0;
p u b l i c b o o l e a n hasNext ( ) {r e t u r n t r u e ;
}
p u b l i c i n t n e x t ( ) {i ++;
r e t u r n i ∗ i ;}
}
Prof. Michele Loreti Interfaces and Lambda Expressions 120 / 143
![Page 20: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/20.jpg)
Implementing an Interface
The classes that want to be usable with the average method mustimplement the IntSequence interface
p u b l i c c l a s s SquareSequence implements I n t S e q u e n c e {
p r i v a t e i n t i =0;
p u b l i c b o o l e a n hasNext ( ) {r e t u r n t r u e ;
}
p u b l i c i n t n e x t ( ) {i ++;
r e t u r n i ∗ i ;}
}
Prof. Michele Loreti Interfaces and Lambda Expressions 120 / 143
![Page 21: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/21.jpg)
Example: Fibonacci Sequence
p u b l i c c l a s s F i b o n a c c i S e q u e n c e implements I n t S e q u e n c e {
p r i v a t e i n t a = 1 ;p r i v a t e i n t b = 1 ;
p u b l i c b o o l e a n hasNext ( ) {r e t u r n t r u e ;
}
p u b l i c i n t n e x t ( ) {i n t r e s = a ;a = b ;b = r e s+a ;r e t u r n r e s ;
}
}
Prof. Michele Loreti Interfaces and Lambda Expressions 121 / 143
![Page 22: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/22.jpg)
Example: Digit Sequence
p u b l i c c l a s s D i g i t S e q u e n c e implements I n t S e q u e n c e {p r i v a t e i n t number ;p u b l i c D i g i t S e q u e n c e ( i n t number ) {
t h i s . number = number ;}p u b l i c b o o l e a n hasNext ( ) {
r e t u r n t h i s . number != 0 ;}p u b l i c i n t n e x t ( ) {
i n t r e s u l t = t h i s . number % 1 0 ;t h i s . number /= 1 0 ;r e t u r n r e s u l t ;
}p u b l i c i n t r e s t ( ) {
r e t u r n t h i s . number ;}
}
Prof. Michele Loreti Interfaces and Lambda Expressions 122 / 143
![Page 23: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/23.jpg)
Interface type
Let us consider the following portion of code:
I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;
The type of variable seq is IntSequence!
Terminology: S is a supertype of T (the subtype) when any value of T
can be assigned to a variable of type S (without cast).
Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation! It is dangerous and in general Wrong!
If really needed use instanceof to checlk the correctness of the operation.
Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143
![Page 24: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/24.jpg)
Interface type
Let us consider the following portion of code:
I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;
The type of variable seq is IntSequence!
Terminology: S is a supertype of T (the subtype) when any value of T
can be assigned to a variable of type S (without cast).
Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation! It is dangerous and in general Wrong!
If really needed use instanceof to checlk the correctness of the operation.
Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143
![Page 25: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/25.jpg)
Interface type
Let us consider the following portion of code:
I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;
The type of variable seq is IntSequence!
Terminology: S is a supertype of T (the subtype) when any value of T
can be assigned to a variable of type S (without cast).
Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation! It is dangerous and in general Wrong!
If really needed use instanceof to checlk the correctness of the operation.
Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143
![Page 26: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/26.jpg)
Interface type
Let us consider the following portion of code:
I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;
The type of variable seq is IntSequence!
Terminology: S is a supertype of T (the subtype) when any value of T
can be assigned to a variable of type S (without cast).
Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation!
It is dangerous and in general Wrong!
If really needed use instanceof to checlk the correctness of the operation.
Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143
![Page 27: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/27.jpg)
Interface type
Let us consider the following portion of code:
I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;
The type of variable seq is IntSequence!
Terminology: S is a supertype of T (the subtype) when any value of T
can be assigned to a variable of type S (without cast).
Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation! It is dangerous and in general Wrong!
If really needed use instanceof to checlk the correctness of the operation.
Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143
![Page 28: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/28.jpg)
Interface type
Let us consider the following portion of code:
I n t S e q u e n c e seq = new D i g i t S e q u e n c e (19876) ;d o u b l e avg = U t i l . a v e r a g e ( seq , 100) ;
The type of variable seq is IntSequence!
Terminology: S is a supertype of T (the subtype) when any value of T
can be assigned to a variable of type S (without cast).
Occasionally, you may need to convert a variable of supertype in a specificsubtype with the cast operation! It is dangerous and in general Wrong!
If really needed use instanceof to checlk the correctness of the operation.
Prof. Michele Loreti Interfaces and Lambda Expressions 123 / 143
![Page 29: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/29.jpg)
Extending Interfaces
An interface can extend another, requiring or providing additional methodson top of the original ones.
Example:
p u b l i c i n t e r f a c e C l o s e a b l e {v o i d c l o s e ( ) ;
}
p u b l i c i n t e r f a c e Channel e x t e n d s C l o s e a b l e {b o o l e a n isOpen ( ) ;
}
Prof. Michele Loreti Interfaces and Lambda Expressions 124 / 143
![Page 30: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/30.jpg)
Extending Interfaces
An interface can extend another, requiring or providing additional methodson top of the original ones.
Example:
p u b l i c i n t e r f a c e C l o s e a b l e {v o i d c l o s e ( ) ;
}
p u b l i c i n t e r f a c e Channel e x t e n d s C l o s e a b l e {b o o l e a n isOpen ( ) ;
}
Prof. Michele Loreti Interfaces and Lambda Expressions 124 / 143
![Page 31: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/31.jpg)
Extending Interfaces
An interface can extend another, requiring or providing additional methodson top of the original ones.
Example:
p u b l i c i n t e r f a c e C l o s e a b l e {v o i d c l o s e ( ) ;
}
p u b l i c i n t e r f a c e Channel e x t e n d s C l o s e a b l e {b o o l e a n isOpen ( ) ;
}
Prof. Michele Loreti Interfaces and Lambda Expressions 124 / 143
![Page 32: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/32.jpg)
Implementing Multiple Interfaces
A class can implement any number of interfaces.
All the methods defined in all the implemented interfaces must beprovided.
Warning: handle possible clash of names!
Prof. Michele Loreti Interfaces and Lambda Expressions 125 / 143
![Page 33: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/33.jpg)
Implementing Multiple Interfaces
A class can implement any number of interfaces.
All the methods defined in all the implemented interfaces must beprovided.
Warning: handle possible clash of names!
Prof. Michele Loreti Interfaces and Lambda Expressions 125 / 143
![Page 34: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/34.jpg)
Implementing Multiple Interfaces
A class can implement any number of interfaces.
All the methods defined in all the implemented interfaces must beprovided.
Warning: handle possible clash of names!
Prof. Michele Loreti Interfaces and Lambda Expressions 125 / 143
![Page 35: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/35.jpg)
Constants
An interface can contain definitions of constants.
Each field defined in the interface is automatically considered aspublic static final .
These fields can be accessed via the standard . notation.
Example:
SwingConstants .NORTH
Prof. Michele Loreti Interfaces and Lambda Expressions 126 / 143
![Page 36: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/36.jpg)
Constants
An interface can contain definitions of constants.
Each field defined in the interface is automatically considered aspublic static final .
These fields can be accessed via the standard . notation.
Example:
SwingConstants .NORTH
Prof. Michele Loreti Interfaces and Lambda Expressions 126 / 143
![Page 37: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/37.jpg)
Constants
An interface can contain definitions of constants.
Each field defined in the interface is automatically considered aspublic static final .
These fields can be accessed via the standard . notation.
Example:
SwingConstants .NORTH
Prof. Michele Loreti Interfaces and Lambda Expressions 126 / 143
![Page 38: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/38.jpg)
Constants
An interface can contain definitions of constants.
Each field defined in the interface is automatically considered aspublic static final .
These fields can be accessed via the standard . notation.
Example:
SwingConstants .NORTH
Prof. Michele Loreti Interfaces and Lambda Expressions 126 / 143
![Page 39: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/39.jpg)
Methods in the Interface
In the previous versions of Java all methods in an interface was abstract(that is without body).
In the latest version of Java an interface can contain three kinds ofmethods with a concrete implementation:
� static;
� default;
� private methods.
Prof. Michele Loreti Interfaces and Lambda Expressions 127 / 143
![Page 40: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/40.jpg)
Methods in the Interface
In the previous versions of Java all methods in an interface was abstract(that is without body).
In the latest version of Java an interface can contain three kinds ofmethods with a concrete implementation:
� static;
� default;
� private methods.
Prof. Michele Loreti Interfaces and Lambda Expressions 127 / 143
![Page 41: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/41.jpg)
Methods in the Interface
In the previous versions of Java all methods in an interface was abstract(that is without body).
In the latest version of Java an interface can contain three kinds ofmethods with a concrete implementation:
� static;
� default;
� private methods.
Prof. Michele Loreti Interfaces and Lambda Expressions 127 / 143
![Page 42: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/42.jpg)
Methods in the Interface
In the previous versions of Java all methods in an interface was abstract(that is without body).
In the latest version of Java an interface can contain three kinds ofmethods with a concrete implementation:
� static;
� default;
� private methods.
Prof. Michele Loreti Interfaces and Lambda Expressions 127 / 143
![Page 43: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/43.jpg)
Static Methods
It may be convenient to equip interfaces with static methods (like thefactory methods) that provide generic functionalities for a given type.
p u b l i c i n t e r f a c e I n t S e q u e n c e {
. . .
s t a t i c I n t S e q u e n c e d i g i t s O f ( i n t n ) {r e t u r n new D i g i t S e q u e n c e ( n ) ;
}
}
Prof. Michele Loreti Interfaces and Lambda Expressions 128 / 143
![Page 44: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/44.jpg)
Default Methods
Starting from Java 1.9, we can provide a default implementation for anyinterface method:
p u b l i c i n t e r f a c e I n t S e q u e n c e {d e f a u l t b o o l e a n hasNext ( ) { r e t u r n t r u e ; }i n t n e x t ( ) ;. . .
}
A class implementing an interface can choose to override or not thedefault implementation.
The use of default methods is particularly useful for interface evolutions!
Prof. Michele Loreti Interfaces and Lambda Expressions 129 / 143
![Page 45: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/45.jpg)
Default Methods
Starting from Java 1.9, we can provide a default implementation for anyinterface method:
p u b l i c i n t e r f a c e I n t S e q u e n c e {d e f a u l t b o o l e a n hasNext ( ) { r e t u r n t r u e ; }i n t n e x t ( ) ;. . .
}
A class implementing an interface can choose to override or not thedefault implementation.
The use of default methods is particularly useful for interface evolutions!
Prof. Michele Loreti Interfaces and Lambda Expressions 129 / 143
![Page 46: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/46.jpg)
Default Methods
Starting from Java 1.9, we can provide a default implementation for anyinterface method:
p u b l i c i n t e r f a c e I n t S e q u e n c e {d e f a u l t b o o l e a n hasNext ( ) { r e t u r n t r u e ; }i n t n e x t ( ) ;. . .
}
A class implementing an interface can choose to override or not thedefault implementation.
The use of default methods is particularly useful for interface evolutions!
Prof. Michele Loreti Interfaces and Lambda Expressions 129 / 143
![Page 47: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/47.jpg)
Default Methods
Starting from Java 1.9, we can provide a default implementation for anyinterface method:
p u b l i c i n t e r f a c e I n t S e q u e n c e {d e f a u l t b o o l e a n hasNext ( ) { r e t u r n t r u e ; }i n t n e x t ( ) ;. . .
}
A class implementing an interface can choose to override or not thedefault implementation.
The use of default methods is particularly useful for interface evolutions!
Prof. Michele Loreti Interfaces and Lambda Expressions 129 / 143
![Page 48: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/48.jpg)
Resolving default methods conflict
Let us consider the following interfaces:
p u b l i c i n t e r f a c e Person {S t r i n g getName ( ) ;d e f a u l t i n t g e t I d ( ) { r e t u r n 0 ; }
}
p u b l i c i n t e r f a c e I d e n t i f i e d {d e f a u l t i n t g e t I d ( ) { r e t u r n Math . abs ( hashCode ( ) ) ; }
}
Consider now the class Employee defined as follows:
p u b l i c c l a s s Employee implements Person , I d e n t i f i e d {. . .
}
There is a conflict that we have to resolve by providing animplementation of getId.
Prof. Michele Loreti Interfaces and Lambda Expressions 130 / 143
![Page 49: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/49.jpg)
Resolving default methods conflict
Let us consider the following interfaces:
p u b l i c i n t e r f a c e Person {S t r i n g getName ( ) ;d e f a u l t i n t g e t I d ( ) { r e t u r n 0 ; }
}
p u b l i c i n t e r f a c e I d e n t i f i e d {d e f a u l t i n t g e t I d ( ) { r e t u r n Math . abs ( hashCode ( ) ) ; }
}
Consider now the class Employee defined as follows:
p u b l i c c l a s s Employee implements Person , I d e n t i f i e d {. . .
}
There is a conflict that we have to resolve by providing animplementation of getId.
Prof. Michele Loreti Interfaces and Lambda Expressions 130 / 143
![Page 50: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/50.jpg)
Resolving default methods conflict
Let us consider the following interfaces:
p u b l i c i n t e r f a c e Person {S t r i n g getName ( ) ;d e f a u l t i n t g e t I d ( ) { r e t u r n 0 ; }
}
p u b l i c i n t e r f a c e I d e n t i f i e d {d e f a u l t i n t g e t I d ( ) { r e t u r n Math . abs ( hashCode ( ) ) ; }
}
Consider now the class Employee defined as follows:
p u b l i c c l a s s Employee implements Person , I d e n t i f i e d {. . .
}
There is a conflict that we have to resolve by providing animplementation of getId.
Prof. Michele Loreti Interfaces and Lambda Expressions 130 / 143
![Page 51: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/51.jpg)
Private methods
An interface can also contain private methods.
These can be static or not, and can be used only by other methods definedin the interface.
These private methods typically implement utility features and their useshould be limited.
Prof. Michele Loreti Interfaces and Lambda Expressions 131 / 143
![Page 52: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/52.jpg)
Private methods
An interface can also contain private methods.
These can be static or not, and can be used only by other methods definedin the interface.
These private methods typically implement utility features and their useshould be limited.
Prof. Michele Loreti Interfaces and Lambda Expressions 131 / 143
![Page 53: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/53.jpg)
Private methods
An interface can also contain private methods.
These can be static or not, and can be used only by other methods definedin the interface.
These private methods typically implement utility features and their useshould be limited.
Prof. Michele Loreti Interfaces and Lambda Expressions 131 / 143
![Page 54: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/54.jpg)
Examples. . .
Many interfaces are provided within Java API:
� Comparable<T>;
� Comparator<T>;
� Runnable;
� EventHandler<T>.
Prof. Michele Loreti Interfaces and Lambda Expressions 132 / 143
![Page 55: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/55.jpg)
Examples. . .
Many interfaces are provided within Java API:
� Comparable<T>;
� Comparator<T>;
� Runnable;
� EventHandler<T>.
Prof. Michele Loreti Interfaces and Lambda Expressions 132 / 143
![Page 56: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/56.jpg)
Examples. . .
Many interfaces are provided within Java API:
� Comparable<T>;
� Comparator<T>;
� Runnable;
� EventHandler<T>.
Prof. Michele Loreti Interfaces and Lambda Expressions 132 / 143
![Page 57: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/57.jpg)
Examples. . .
Many interfaces are provided within Java API:
� Comparable<T>;
� Comparator<T>;
� Runnable;
� EventHandler<T>.
Prof. Michele Loreti Interfaces and Lambda Expressions 132 / 143
![Page 58: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/58.jpg)
Lambda Expressions
A lambda expression is a block of code that you can pass around so it canbe executed later, once or multiple time.
It can be defined as a sequenceof parameters followed by a an expression
( S t r i n g f i r s t , S t r i n g second )−> f i r s t . l e n g t h ( )−second . l e n g t h ( )
or a block:
( S t r i n g f i r s t , S t r i n g second ) −> {i n t d i f f e r e n c e = f i r s t . l e n g t h ( )−second . l e n g t h ( ) ;i f ( d i f f e r e n c e <0) r e t u r n −1;e l s e i f ( d i f f e r e n c e >0) r e t u r n 1 ;e l s e r e t u r n 0 ;
}
Prof. Michele Loreti Interfaces and Lambda Expressions 133 / 143
![Page 59: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/59.jpg)
Lambda Expressions
A lambda expression is a block of code that you can pass around so it canbe executed later, once or multiple time. It can be defined as a sequenceof parameters followed by a an expression
( S t r i n g f i r s t , S t r i n g second )−> f i r s t . l e n g t h ( )−second . l e n g t h ( )
or a block:
( S t r i n g f i r s t , S t r i n g second ) −> {i n t d i f f e r e n c e = f i r s t . l e n g t h ( )−second . l e n g t h ( ) ;i f ( d i f f e r e n c e <0) r e t u r n −1;e l s e i f ( d i f f e r e n c e >0) r e t u r n 1 ;e l s e r e t u r n 0 ;
}
Prof. Michele Loreti Interfaces and Lambda Expressions 133 / 143
![Page 60: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/60.jpg)
Lambda Expressions
A lambda expression is a block of code that you can pass around so it canbe executed later, once or multiple time. It can be defined as a sequenceof parameters followed by a an expression
( S t r i n g f i r s t , S t r i n g second )−> f i r s t . l e n g t h ( )−second . l e n g t h ( )
or a block:
( S t r i n g f i r s t , S t r i n g second ) −> {i n t d i f f e r e n c e = f i r s t . l e n g t h ( )−second . l e n g t h ( ) ;i f ( d i f f e r e n c e <0) r e t u r n −1;e l s e i f ( d i f f e r e n c e >0) r e t u r n 1 ;e l s e r e t u r n 0 ;
}
Prof. Michele Loreti Interfaces and Lambda Expressions 133 / 143
![Page 61: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/61.jpg)
Functional Interfaces
Lambda expressions are compatible with Functional Interfaces.
These are interfaces that contains a single abstract method.
We can use a lambda expression (with the appropriate type) when afunctional interface is expected:
A r r a y s . s o r t ( anArray , ( x , y ) −> x . l e n g t h ( )−y . l e n g t h ( ) ) ;
The type of parameters can be inferred!
Prof. Michele Loreti Interfaces and Lambda Expressions 134 / 143
![Page 62: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/62.jpg)
Functional Interfaces
Lambda expressions are compatible with Functional Interfaces.
These are interfaces that contains a single abstract method.
We can use a lambda expression (with the appropriate type) when afunctional interface is expected:
A r r a y s . s o r t ( anArray , ( x , y ) −> x . l e n g t h ( )−y . l e n g t h ( ) ) ;
The type of parameters can be inferred!
Prof. Michele Loreti Interfaces and Lambda Expressions 134 / 143
![Page 63: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/63.jpg)
Functional Interfaces
Lambda expressions are compatible with Functional Interfaces.
These are interfaces that contains a single abstract method.
We can use a lambda expression (with the appropriate type) when afunctional interface is expected:
A r r a y s . s o r t ( anArray , ( x , y ) −> x . l e n g t h ( )−y . l e n g t h ( ) ) ;
The type of parameters can be inferred!
Prof. Michele Loreti Interfaces and Lambda Expressions 134 / 143
![Page 64: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/64.jpg)
Functional Interfaces
Lambda expressions are compatible with Functional Interfaces.
These are interfaces that contains a single abstract method.
We can use a lambda expression (with the appropriate type) when afunctional interface is expected:
A r r a y s . s o r t ( anArray , ( x , y ) −> x . l e n g t h ( )−y . l e n g t h ( ) ) ;
The type of parameters can be inferred!
Prof. Michele Loreti Interfaces and Lambda Expressions 134 / 143
![Page 65: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/65.jpg)
Method References
Suppose that we want to sort strings regardless of letter case. We couldcall:
A r r a y s . s o r t ( s t r i n g s , ( x , y ) −> x . compareToIgnoreCase ( y ) ) ;
Alternatively, we can pass directly the method reference:
A r r a y s . s o r t ( s t r i n g s , S t r i n g : : compareToIgnoreCase ) ;
There are many examples of use:
� list .remove(Objects:: isNull )
� list .forEach(System.out:: println )
Prof. Michele Loreti Interfaces and Lambda Expressions 135 / 143
![Page 66: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/66.jpg)
Method References
Suppose that we want to sort strings regardless of letter case. We couldcall:
A r r a y s . s o r t ( s t r i n g s , ( x , y ) −> x . compareToIgnoreCase ( y ) ) ;
Alternatively, we can pass directly the method reference:
A r r a y s . s o r t ( s t r i n g s , S t r i n g : : compareToIgnoreCase ) ;
There are many examples of use:
� list .remove(Objects:: isNull )
� list .forEach(System.out:: println )
Prof. Michele Loreti Interfaces and Lambda Expressions 135 / 143
![Page 67: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/67.jpg)
Method References
Suppose that we want to sort strings regardless of letter case. We couldcall:
A r r a y s . s o r t ( s t r i n g s , ( x , y ) −> x . compareToIgnoreCase ( y ) ) ;
Alternatively, we can pass directly the method reference:
A r r a y s . s o r t ( s t r i n g s , S t r i n g : : compareToIgnoreCase ) ;
There are many examples of use:
� list .remove(Objects:: isNull )
� list .forEach(System.out:: println )
Prof. Michele Loreti Interfaces and Lambda Expressions 135 / 143
![Page 68: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/68.jpg)
Method References
Suppose that we want to sort strings regardless of letter case. We couldcall:
A r r a y s . s o r t ( s t r i n g s , ( x , y ) −> x . compareToIgnoreCase ( y ) ) ;
Alternatively, we can pass directly the method reference:
A r r a y s . s o r t ( s t r i n g s , S t r i n g : : compareToIgnoreCase ) ;
There are many examples of use:
� list .remove(Objects:: isNull )
� list .forEach(System.out:: println )
Prof. Michele Loreti Interfaces and Lambda Expressions 135 / 143
![Page 69: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/69.jpg)
Method References
There are three variations for method references:
� Class :: instanceMethod
� Class :: staticMethod
� object :: instanceMethod
� Class :: new
Prof. Michele Loreti Interfaces and Lambda Expressions 136 / 143
![Page 70: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/70.jpg)
Scope of a Lambda Expression
A lambda expression has the same scope as a nested block
This means that a lambda expression can access to all the names definedin the enclosing scope.
Example:
p u b l i c c l a s s AClass {p r i v a t e i n t v a l u e = 0 ;
p u b l i c v o i d s e t V a l u e ( i n t v a l u e ) {t h i s . v a l u e = v a l u e ;
}
p u b l i c Funct ion<I n t e g e r , I n t e g e r > getLambda ( ) {r e t u r n ( x ) −> t h i s . v a l u e+x ;
}}
Prof. Michele Loreti Interfaces and Lambda Expressions 137 / 143
![Page 71: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/71.jpg)
Scope of a Lambda Expression
A lambda expression has the same scope as a nested block
This means that a lambda expression can access to all the names definedin the enclosing scope.
Example:
p u b l i c c l a s s AClass {p r i v a t e i n t v a l u e = 0 ;
p u b l i c v o i d s e t V a l u e ( i n t v a l u e ) {t h i s . v a l u e = v a l u e ;
}
p u b l i c Funct ion<I n t e g e r , I n t e g e r > getLambda ( ) {r e t u r n ( x ) −> t h i s . v a l u e+x ;
}}
Prof. Michele Loreti Interfaces and Lambda Expressions 137 / 143
![Page 72: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/72.jpg)
Scope of a Lambda Expression
A lambda expression has the same scope as a nested block
This means that a lambda expression can access to all the names definedin the enclosing scope.
Example:
p u b l i c c l a s s AClass {p r i v a t e i n t v a l u e = 0 ;
p u b l i c v o i d s e t V a l u e ( i n t v a l u e ) {t h i s . v a l u e = v a l u e ;
}
p u b l i c Funct ion<I n t e g e r , I n t e g e r > getLambda ( ) {r e t u r n ( x ) −> t h i s . v a l u e+x ;
}}
Prof. Michele Loreti Interfaces and Lambda Expressions 137 / 143
![Page 73: Interfaces and Lambda Expressionsdidattica.cs.unicam.it › lib › exe › fetch.php?media=did...Programmazione Avanzata Corso di Laurea in Informatica (L31) Scuola di Scienze e Tecnologie](https://reader034.vdocuments.us/reader034/viewer/2022042404/5f1bb67569dc1517ea6c65df/html5/thumbnails/73.jpg)
To be continued. . .
Prof. Michele Loreti Interfaces and Lambda Expressions 138 / 143