Bael 806 lazy (#2248)
* BAEL-806 lazy article code * BAEL-806 remove comment
This commit is contained in:
parent
54c6928bfe
commit
1b9353c83e
@ -0,0 +1,14 @@
|
|||||||
|
package com.baeldung.lazy;
|
||||||
|
|
||||||
|
public class ClassWithHeavyInitialization {
|
||||||
|
private ClassWithHeavyInitialization() {
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class LazyHolder {
|
||||||
|
public static final ClassWithHeavyInitialization INSTANCE = new ClassWithHeavyInitialization();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ClassWithHeavyInitialization getInstance() {
|
||||||
|
return LazyHolder.INSTANCE;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.baeldung.kotlin;
|
||||||
|
|
||||||
|
|
||||||
|
import com.baeldung.lazy.ClassWithHeavyInitialization;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static junit.framework.TestCase.assertTrue;
|
||||||
|
|
||||||
|
public class LazyJavaUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void giveHeavyClass_whenInitLazy_thenShouldReturnInstanceOnFirstCall() {
|
||||||
|
//when
|
||||||
|
ClassWithHeavyInitialization classWithHeavyInitialization = ClassWithHeavyInitialization.getInstance();
|
||||||
|
ClassWithHeavyInitialization classWithHeavyInitialization2 = ClassWithHeavyInitialization.getInstance();
|
||||||
|
|
||||||
|
//then
|
||||||
|
assertTrue(classWithHeavyInitialization == classWithHeavyInitialization2);
|
||||||
|
}
|
||||||
|
}
|
68
kotlin/src/test/kotlin/com/baeldung/kotlin/LazyUnitTest.kt
Normal file
68
kotlin/src/test/kotlin/com/baeldung/kotlin/LazyUnitTest.kt
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
package com.baeldung.kotlin
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import java.util.concurrent.CountDownLatch
|
||||||
|
import java.util.concurrent.Executors
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class LazyUnitTest {
|
||||||
|
@Test
|
||||||
|
fun givenLazyValue_whenGetIt_thenShouldInitializeItOnlyOnce() {
|
||||||
|
//given
|
||||||
|
val numberOfInitializations: AtomicInteger = AtomicInteger()
|
||||||
|
val lazyValue: ClassWithHeavyInitialization by lazy {
|
||||||
|
numberOfInitializations.incrementAndGet()
|
||||||
|
ClassWithHeavyInitialization()
|
||||||
|
}
|
||||||
|
//when
|
||||||
|
println(lazyValue)
|
||||||
|
println(lazyValue)
|
||||||
|
|
||||||
|
//then
|
||||||
|
assertEquals(numberOfInitializations.get(), 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenLazyValue_whenGetItUsingPublication_thenCouldInitializeItMoreThanOnce() {
|
||||||
|
//given
|
||||||
|
val numberOfInitializations: AtomicInteger = AtomicInteger()
|
||||||
|
val lazyValue: ClassWithHeavyInitialization by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||||
|
numberOfInitializations.incrementAndGet()
|
||||||
|
ClassWithHeavyInitialization()
|
||||||
|
}
|
||||||
|
val executorService = Executors.newFixedThreadPool(2)
|
||||||
|
val countDownLatch = CountDownLatch(1)
|
||||||
|
//when
|
||||||
|
executorService.submit { countDownLatch.await(); println(lazyValue) }
|
||||||
|
executorService.submit { countDownLatch.await(); println(lazyValue) }
|
||||||
|
countDownLatch.countDown()
|
||||||
|
|
||||||
|
//then
|
||||||
|
executorService.awaitTermination(1, TimeUnit.SECONDS)
|
||||||
|
executorService.shutdown()
|
||||||
|
assertEquals(numberOfInitializations.get(), 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
class ClassWithHeavyInitialization {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
lateinit var a: String
|
||||||
|
@Test
|
||||||
|
fun givenLateInitProperty_whenAccessItAfterInit_thenPass() {
|
||||||
|
//when
|
||||||
|
a = "it"
|
||||||
|
println(a)
|
||||||
|
|
||||||
|
//then not throw
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = UninitializedPropertyAccessException::class)
|
||||||
|
fun givenLateInitProperty_whenAccessItWithoutInit_thenThrow() {
|
||||||
|
//when
|
||||||
|
println(a)
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user