首页 文章
  • 1 votes
     answers
     views

    .NET 4.0 Generic Invariant,Covariant,Contravariant

    这是我面临的情景: public abstract class Record { } public abstract class TableRecord : Record { } public abstract class LookupTableRecord : TableRecord { } public sealed class UserRecord : LookupTableRe...
  • 0 votes
     answers
     views

    Scala匿名函数genric方差问题

    我很难理解逆变量,协变量,不变性等 . 从Why doesn't the example compile, aka how does (co-, contra-, and in-) variance work?我已经学会了如何将函数视为另一个函数的子类型 . (真的很有用!) 下面的代码是我认为解决我的难题的重要部分 . 我提取的部分我认为会给问题增加不必要的复杂性 . 根据示例,我有一个Stu...
  • 5 votes
     answers
     views

    逆变型的方法继承

    我定义了两个类型类: trait WeakOrder[-X] { self => def cmp(x: X, y: X): Int def max[Y <: X](x: Y, y: Y): Y = if (cmp(x, y) >= 0) x else y def min[Y <: X](x: Y, y: Y): Y = if (cmp(x, y) <= 0...
  • 4 votes
     answers
     views

    为什么Liskov替换原则需要论证是逆变的?

    Liskov Substitution Principle对派生类中的方法签名施加的规则之一是: 子类型中方法参数的逆变 . 如果我理解正确,那就是说派生类的重写函数应该允许反变量参数(超类型参数) . 但是,我无法理解这条规则背后的原因 . 由于LSP主要是关于动态地将类型与子类型(而不是超类型)绑定以实现抽象,因此允许超类型作为派生类中的方法参数对我来说非常困惑 . 我的问题是: 为什...
  • 2 votes
     answers
     views

    Java,强类型,协方差和反差[关闭]

    在我的OOP课程中学习考试时,我遇到了一个问题,我得到了一个我并不理解的答案 . 问题如下(翻译): 编程语言“Sava”在各方面都与Java类似,除了以下内容: 它的结构类型 覆盖方法时,参数可以是逆变的,返回类型可以是协变的 . 鉴于以下类和接口,以下任务是否合法? interface I{ boolean equals(I i){…} } class C{ ...
  • 10 votes
     answers
     views

    Kotlin的@uncheckedVariance?

    在他的演讲Compilers are Databases中,Martin Odersky提出了一个有趣的方差角案例: class Tree[-T] { def tpe: T @uncheckedVariance def withType(t: Type): Tree[Type] } T 被定义为逆变,因为将类型化的树( Tree[Type] )视为无类型树( Tree[Nothing] ...

热门问题