AN
Size: a a a
AN
IP
AN
ВМ
sealed class A { class B: A; class C: A; class D: A }
when (a) { is B -> fB(a); is C -> fC(a); is D -> fD(a) }
abstract class A(val tp: Int) { class B: A(1); class C: A(2); class D: A(3) }
when (a.tp) { 1 -> fB(a as B); 2 -> fC(a as C); 3 -> fD(a as D) }
?IP
interface BufferFactory<A<_> : Buffer<_>> {
fun <T> new(size: Int, init: (Int) -> T): A<T>
}
AN
sealed class A { class B: A; class C: A; class D: A }
when (a) { is B -> fB(a); is C -> fC(a); is D -> fD(a) }
abstract class A(val tp: Int) { class B: A(1); class C: A(2); class D: A(3) }
when (a.tp) { 1 -> fB(a as B); 2 -> fC(a as C); 3 -> fD(a as D) }
?AN
interface BufferFactory<A<_> : Buffer<_>> {
fun <T> new(size: Int, init: (Int) -> T): A<T>
}
ВМ
AN
IP
IP
AN
IP
AN
IP
IP
class ListBuffer<T> {
companion object {
val A = BufferFactory<ListBuffer<_>> { ... }
val B = BufferFactory<ListBuffer<_>> { ... }
}
}
AN
IP
IP
AN