BAEL 5932 - Callback Functions in Java (#13335)
This commit is contained in:
parent
b5d8f4e93c
commit
d7e857f427
|
@ -14,4 +14,30 @@
|
|||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-inline</artifactId>
|
||||
<version>${mockito-inline.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>core-java-functional</finalName>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
|
||||
<properties>
|
||||
<mockito-inline.version>3.8.0</mockito-inline.version>
|
||||
<assertj.version>3.22.0</assertj.version>
|
||||
<commons-lang3.version>3.12.0</commons-lang3.version>
|
||||
<vavr.version>0.10.4</vavr.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,17 @@
|
|||
package com.baeldung.callbackfunctions;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class ConsumerCallback {
|
||||
public void getAge(int initialAge, Consumer<Integer> callback) {
|
||||
callback.accept(initialAge);
|
||||
}
|
||||
|
||||
public void increaseAge(int initialAge, int ageDifference, Consumer<Integer> callback) {
|
||||
System.out.println("===== Increase age ====");
|
||||
|
||||
int newAge = initialAge + ageDifference;
|
||||
callback.accept(newAge);
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package com.baeldung.callbackfunctions;
|
||||
|
||||
public interface EventListener {
|
||||
|
||||
String onTrigger();
|
||||
|
||||
void respondToTrigger();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package com.baeldung.callbackfunctions.asynchronous;
|
||||
|
||||
import com.baeldung.callbackfunctions.EventListener;
|
||||
|
||||
public class AsynchronousEventConsumer{
|
||||
|
||||
private EventListener listener;
|
||||
|
||||
public AsynchronousEventConsumer(EventListener listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public void doAsynchronousOperation()
|
||||
{
|
||||
System.out.println("Performing operation in Asynchronous Task");
|
||||
|
||||
new Thread(() -> listener.onTrigger()).start();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.baeldung.callbackfunctions.asynchronous;
|
||||
|
||||
import com.baeldung.callbackfunctions.EventListener;
|
||||
|
||||
public class AsynchronousEventListenerImpl implements EventListener {
|
||||
|
||||
@Override
|
||||
public String onTrigger()
|
||||
{
|
||||
respondToTrigger();
|
||||
return "Asynchronously running callback function";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void respondToTrigger(){
|
||||
System.out.println("This is a side effect of the asynchronous trigger.");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package com.baeldung.callbackfunctions.synchronous;
|
||||
|
||||
import com.baeldung.callbackfunctions.EventListener;
|
||||
|
||||
public class SynchronousEventConsumer {
|
||||
|
||||
private final EventListener eventListener;
|
||||
|
||||
public SynchronousEventConsumer(EventListener listener)
|
||||
{
|
||||
this.eventListener = listener;
|
||||
}
|
||||
|
||||
public String doSynchronousOperation()
|
||||
{
|
||||
System.out.println("Performing callback before synchronous Task");
|
||||
|
||||
return eventListener.onTrigger();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package com.baeldung.callbackfunctions.synchronous;
|
||||
|
||||
import com.baeldung.callbackfunctions.EventListener;
|
||||
|
||||
public class SynchronousEventListenerImpl implements EventListener {
|
||||
|
||||
@Override
|
||||
public String onTrigger()
|
||||
{
|
||||
return "Synchronously running callback function";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void respondToTrigger(){
|
||||
System.out.println("Response to trigger");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package com.baeldung.callbackfunctions;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
import com.baeldung.callbackfunctions.EventListener;
|
||||
import com.baeldung.callbackfunctions.asynchronous.AsynchronousEventConsumer;
|
||||
import com.baeldung.callbackfunctions.asynchronous.AsynchronousEventListenerImpl;
|
||||
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
public class AsynchronousCallbackUnitTest {
|
||||
|
||||
@Test
|
||||
public void whenCallbackIsInvokedAsynchronously_shouldRunAsynchronousOperation(){
|
||||
EventListener listener = Mockito.mock(AsynchronousEventListenerImpl.class);
|
||||
AsynchronousEventConsumer asynchronousEventListenerConsumer = new AsynchronousEventConsumer(listener);
|
||||
asynchronousEventListenerConsumer.doAsynchronousOperation();
|
||||
|
||||
verify(listener, times(1)).onTrigger();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.baeldung.callbackfunctions;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import com.baeldung.callbackfunctions.ConsumerCallback;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class ConsumerCallbackUnitTest {
|
||||
|
||||
@Test
|
||||
public void whenIncreasingInitialAgeByGivenValueThroughCallback_shouldIncreaseAge(){
|
||||
ConsumerCallback consumerCallback = new ConsumerCallback();
|
||||
consumerCallback.getAge(20, (initialAge) -> {
|
||||
int ageDifference = 10;
|
||||
consumerCallback.increaseAge(initialAge, ageDifference, (newAge) -> {
|
||||
assertEquals(initialAge + ageDifference, newAge);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package callbackFunctions;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import com.baeldung.callbackfunctions.EventListener;
|
||||
import com.baeldung.callbackfunctions.synchronous.SynchronousEventConsumer;
|
||||
import com.baeldung.callbackfunctions.synchronous.SynchronousEventListenerImpl;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
|
||||
public class SynchronousCallbackUnitTest {
|
||||
|
||||
@Test
|
||||
public void whenCallbackIsInvokedSynchronously_shouldRunSynchronousOperation(){
|
||||
EventListener listener = new SynchronousEventListenerImpl();
|
||||
SynchronousEventConsumer synchronousEventConsumer = new SynchronousEventConsumer(listener);
|
||||
String result = synchronousEventConsumer.doSynchronousOperation();
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals("Synchronously running callback function", result);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue