ืืืงืฉื ืื ืชืืจื ืืืชืจ ืืื, ืื ื ืจืง ืืชืืื ืืชืจืื ืืืืจืื
ืืืฉืง ืืืื ืืจืฉืช ืืืืฉืง ืืืจ; ืื ืืืืฉืง ืืืจืฉ ืืืืฉืง ืคืื ืงืฆืืื ืื ืืืื ื ืืืื ืฉืืืืช ืืืคืฉืืืช ืืืฉืืช, ืื ืื ืืืฉืง ืื ืคืื ืงืฆืืื ืื. ืืื ืืืฉืง ืืืื ืืืืื ืจืง ืฉืืื ืืืคืฉืืช ืืืช ืืฉืืืืช ืืจืืจืช ืืืื ืจืืืช, ืืืื ืขืืืื ืืืืฉื ืคืื ืงืฆืืื ืื.
ืืืื ืืืืฉืงืื ืคืื ืงืฆืืื ืืืื - ืืืฉืืื ืฉื ืืฆืจื ืืืืฉ ื-Java 8
ืื ืืคืชื Java ืืขืืื ืืฉืชืืฉ ืืืื ืืืืืฉืงืื ืืืืื ืืคืืืช ืคืขื ืืืช:java.lang.Runnable
, java.awt.event.ActionListener
, java.util.Comparator
, java.util.concurrent.Callable
. ืืืืื ืืฉ ืืืจ ืืื ืืืฉืืชืฃ, ืืื ืฉืืืืื ืืฉ ืจืง ืฉืืื ืืืช. ืืฉื ื ืืืฉืงืื ืจืืื ืืืจืื ืืืื ื-JDK, ืืื ืื ืืืจืื ืฉื ืืฆืจื ืขื ืืื ืืคืชืื Java. ืืืฉืงืื ืืื ืืืืขืื ืื ืืฉื Single Abstract Method interfaces
(ืืืฉืงื SAM). ืืืช ืืืจืืื ืืคืืคืืืจืืืช ืืืืชืจ ืืืฉืชืืฉ ืืืืฉืงืื ืืื ืืื ืืืฆืืจ ืืืืงืืช ืคื ืืืืืช ืื ืื ืืืืืช ืืืฉืชืืฉืืช ืืืืฉืงืื ืืื, ืืื ืืืืืื ืืืื:
public class AnonymousInnerClassTest {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("A thread created and running...");
}
}).start();
}
}
ื-Java 8, ืืืฉื ื-SAM ื ืืฆืจ ืืืืฉ ืื ืงืจื ืืืฉืงืื ืคืื ืงืฆืืื ืืืื. ื ืืชื ืืืืฆื ืืืชื ืืืืฆืขืืช ืืืืืื ืืืืื, ืืคื ืืืช ืืฉืืื ืืื ืื ืืคื ืืืช. ื ืืฆืจื ืืขืจืช @FunctionalInterface ืืืฉื ืืืฉืืฉืช ืืืจืืงืช ืฉืืืืืช ืืจืืช ืืืืืจ ืืืฉืจ ืืืืฉืง ืฉืฆืืื ืช ืื ืขืืื ืืจืื ืืคืื ืงืฆืืื ืืืช. ืืืื ื ืกืชืื ืขื ืืืฉืง ืคืื ืงืฆืืื ืื ืคืฉืื ืขื ืฉืืื ืืืคืฉืืช ืืืช:
@FunctionalInterface
public interface SimpleFunInterface {
public void doWork();
}
ืืืฉืง ืืืื ืื ืืืืจืื ืขื ืืชืืืืช ืืืคืฉืืืช ืืืืืงื java.lang.Object
, ืืื ืืืงืจื ืื ื ืืชื ืืืืจืื ืขื ืืืืฉืง ืื ืืคืื ืงืฆืืื ืื:
@FunctionalInterface
public interface SimpleFuncInterface {
public void doWork();
public String toString();
public Boolean equals(Object o);
}
ืืจืืข ืฉืืืกืคืชื ืขืื ืฉืืื ืืืคืฉืืช ืืืืฉืง, ื-IDE ืืกืื ืืืชื ืืฉืืืื ืืื ืืชืืื ื:
ืื ืขืื ืืงืจืื: |
---|
@FunctionalInterface
public interface ComplexFunctionalInterface extends SimpleFuncInterface {
default public void doSomeWork() {
System.out.println("Doing some work in interface impl...");
}
default public void doSomeWork() {
System.out.println("Doing some other work in interface impl...");
}
}
ืืืืืื ืืขืืืื ื ืืื ืขืืืื ืืืฉืง ืคืื ืงืฆืืื ืื. ืืขืช ื ืกืชืื ืืืฆื ืื ื ืืืืืื ืืืฉืชืืฉ ืืืืืืื ืืืืื ืืื ืืืืืืฃ ืืืืงื ืคื ืืืืช ืื ืื ืืืืช ืืื ืืืืฉื ืืืฉืงืื ืคืื ืงืฆืืื ืืืื:
/*
*Implementation the interface by creating an
*anonymoous inner class versus using
*lambda expression.
*/
public class SimpleFunInterfaceTest {
public static void main(String[] args) {
carryOutWork(new SimpleFunInterface() {
@Override
public void doWork() {
System.out.println("Do work in SimpleFun impl...");
}
});
carryOutWork(() -> System.out.println("Do work in lambda exp impl..."));
}
public static void carryOutWork(SimpleFuncInterface sfi) {
sfi.work();
}
}
ืืชืืฆืื ืฉื ืืชืืื ืืช ืชืืื ืืืืงืื:
Do work in SimpleFun impl...
Do work in lambda exp impl...
ืืืงืจื ืฉืืชื ืืฉืชืืฉ ื-IDE ืืชืืื ืืชืืืืจ ืืืืื Java lambda (ืื ืืืช Netbeans 8 Nightly) - ืืชื ืืงืื ืจืื ืืขืช ืฉืืืืฉ ืืืืืงืืช ืคื ืืืืืช ืื ืื ืืืืืช: ืื ืืื ืืงืืื ืงืฆืจื ืืืืฉื ืืืฉืงืื ืคืื ืงืฆืืื ืืืื ื-Java 8 ืืืืฆื ื ืืชื ืืืืฉื ืืืชื ืฉืืืืฉ ืืืืืืื ืืืืื.
GO TO FULL VERSION