看下面的代码。为什么在第2行上没有警告,而我可以在没有任何错误的情况下运行它?
fun main() {
val testProducer: TestProducer<in Child> = TestProducer(22)
println(testProducer.get())
}
open class Parent
class Child : Parent()
class TestProducer<T>(private val data: T) {
fun get(): T = data
}
答案 0 :(得分:1)
不,这不是bug。
<script type="text/javascript">
// Using jQuery.
$(function() {
$('form').each(function() {
$(this).find('input').keypress(function(e) {
// Enter pressed?
if(e.which == 10 || e.which == 13) {
this.form.submit();
}
});
$(this).find('input[type=submit]').hide();
});
});
</script>
关键字:它使类型参数成为 contravariant :只能被使用而从不产生。
您可能会因为in
关键字的另一种常规用法而感到困惑-该关键字位于for循环内。
这里所有可以使用in
关键字的地方:
编辑1:
如评论中所述,
in
意味着您可以将Child对象作为函数参数传递给它。但是,当它返回<in Child>
函数中的对象时,它们被视为get()
。您的代码有效,因为Any?
接受println
作为参数。