Skip to content

Instantly share code, notes, and snippets.

View MaksimDmitriev's full-sized avatar

Maksim Dmitriev MaksimDmitriev

View GitHub Profile
@MaksimDmitriev
MaksimDmitriev / QuickSort.kt
Created November 5, 2023 06:24
Quick Sort
package ru.maksim.sample
import org.junit.jupiter.api.Test
class QuickSort {
@Test
fun sample() {
val a = intArrayOf(3, 5, 2, 8, 6, 4)
quickSort(a, 0, a.lastIndex)
@MaksimDmitriev
MaksimDmitriev / CrossInlineSample.kt
Created November 4, 2023 04:27
CrossInlineSample
package ru.maksim.sample
inline fun foo(task: () -> Unit) {
println("Before task")
task()
println("After task")
}
fun callingFunction() {
foo {
@MaksimDmitriev
MaksimDmitriev / ListProcessor.kt
Created November 4, 2023 04:07
JvmSuppressWildcards sample
object ListProcessor {
fun processStrings(strings: List<Any>) {
Printer.print(strings)
}
}
@MaksimDmitriev
MaksimDmitriev / SampleTest.kt
Last active November 2, 2023 02:40
Kotlin star projection
class Foo<out T : Number>(private val data: T) {
fun get2(): T {
return data
}
}
class Bar<T>(private val data: T) {
fun get2(): T {
@MaksimDmitriev
MaksimDmitriev / SampleTest.kt
Created November 1, 2023 11:31
Kotlin out must be present in the implementation class to make the type covariant
interface Source<out T> {
fun nextT(): T
}
class SourceImpl<out T>(private val param: T) : Source<T> {
override fun nextT(): T {
return param
}
@MaksimDmitriev
MaksimDmitriev / Consumer.kt
Last active November 2, 2023 09:09
Kotlin "in"
interface Consumer<in T> {
fun consume(param: T)
}
@MaksimDmitriev
MaksimDmitriev / Consumer.kt
Last active October 31, 2023 11:58
Kotlin out (even with <out T> "? extends" is needed in Java)
interface Consumer<in T> {
fun put(param: T)
}
class ConsumerImpl<in T> : Consumer<T> {
override fun put(param: T) {
println("put param: $param")
}
@MaksimDmitriev
MaksimDmitriev / SampleJavaTest.java
Created October 30, 2023 12:12
Lower bounded wildcard
package ru.maksim.sample;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
public class SampleJavaTest {
@Test
@MaksimDmitriev
MaksimDmitriev / AddIntToObjectsNotWorking.java
Last active October 29, 2023 12:36
Java generics and Kotlin in/out
// Why are Java generics invariant?
// invariant means List<Object> is NOT a parent of List<String>.
// if it was the case, then:
List<String> strs = new ArrayList<String>();
List<Object> objs = strs; // !!! A compile-time error here saves us from a runtime exception later.
objs.add(1); // Put an Integer into a list of Strings
String s = strs.get(0); // !!! ClassCastException: Cannot cast Integer to String
package ru.maksim.sample
import org.junit.jupiter.api.Test
class ReifiedSampleKotlinTest {
@Test
fun foo() {
val shapeManager = ShapeManager()
val circle = Circle(10.0)