- Type: Design proposal
- Author: Viacheslav Makarov
- Status: Draft
Reduce the need in @UnsafeVariance. Allow covariant types to have non-private methods
with non-covariant signature. To protect class' covariance, out-project signatures
| // FILE: 1.kt | |
| package p3 | |
| class A { | |
| fun<T> inTransaction(block: (tran: String) -> T): T { | |
| println("Function 1") | |
| return block("") | |
| } | |
| fun inTransaction(block: (tran: String) -> Unit) { |
| // FILE: 1.kt | |
| package p3 | |
| class A { | |
| fun <T> test(a: List<T>): Int { | |
| println("Function 1") | |
| return 1 | |
| } | |
| fun test(b: List<Int>) { | |
| println("Function 2") |
Code fragment:
fun test() = 1 // comment
Kotlin code fragment:
fun test2() = 2 // comment| fun bar(s: List<String>) {} | |
| fun test() { | |
| bar(listOf().filter { false }) | |
| } |
| \documentclass[10pt]{article} | |
| \usepackage[utf8]{inputenc} | |
| \usepackage[english,russian]{babel} | |
| \inputencoding{utf8} | |
| \usepackage{amsmath} | |
| \usepackage{amsthm} | |
| \usepackage{amssymb} | |
| \newcommand{\Expect}{\mathbb E} | |
| \newcommand{\PRob}{\mathbb P} |
| trait Inv<T> { | |
| var t: T | |
| } | |
| fun <T> some(t: Inv<T>): Inv<Inv<T>> { | |
| return object : Inv<Inv<T>> { | |
| override var t: Inv<T> | |
| get() = t | |
| set(value: Inv<T>) { | |
| t.t = value.t |
| public class Test { | |
| private static class A { | |
| private int bar; | |
| private A() { | |
| bar = 3; | |
| System.out.println(getBar()); | |
| } | |
| public int getBar() { | |
| return bar; |
| open class A { | |
| open val bar: Int | |
| { | |
| bar = 3 | |
| println(bar) | |
| } | |
| } | |
| class B : A() { | |
| override val bar = 4 |
| open class A() { | |
| open fun bar(t: Int = 1) = t | |
| } | |
| class B: A() { | |
| override fun bar(t: Int): Int { | |
| return super.bar() | |
| } | |
| } |