contravariance

    24热度

    2回答

    ReSharper的建议我通过改变本作类型参数T逆变: interface IBusinessValidator<T> where T: IEntity { void Validate(T entity); } 进入这个: interface IBusinessValidator<in T> where T: IEntity { void Validate(T ent

    2热度

    1回答

    我有一个“基地”界面: public interface TargetActionDelegate<TTarget extends Target, TAction extends Action> { void handle(TTarget target, TAction action); } 和修复一个类型参数以下相关接口: public interface TargetDeleg

    0热度

    1回答

    我已经非常举办这样的代码: class Person(name: String, val addr: Int) { def distance(that: Person) = this.addr - that.addr } class Employee(_name: String, role: String, _addr: Int) extends Person(_name, _ad

    0热度

    3回答

    我不知道是谁解决与方差这部分代码: 我有一个抽象父类: public abstract class PdfObject {...} 和两个子类: public class PdfText : PdfObject {...} public class PdfImage : PdfObject {...} 现在,我的错误或经验代码是下一个: public IList<PdfText>

    4热度

    1回答

    我最近已被分配到现有应用程序的一些维护工作。我已经遇到了下面的代码: public interface IEntityService<T, in TKey> { T GetEntityById(TKey id); IEnumerable<T> GetAll(); void Update(T entity); void Delete(TKey key)

    2热度

    1回答

    我是新来的打字稿,我发现一些意想不到的关于协变性/反差异行为。 这里的代码片段: interface Func1 { (): { prop1: string } } // assignment similar to covariance var f1: Func1 = function() { return { prop1: "", prop2: 0 }; } interfa

    6热度

    3回答

    我刚刚学过Scala。现在我对逆变和协变感到困惑。 从这个page,我学到下面的东西: 协方差 也许亚型的最明显的特征是在表达一个更小的类型的值来代替一个更广泛类型的值的能力。例如,假设我有一些类型Real,Integer <: Real和一些不相关的类型Boolean。我可以定义一个函数is_positive :: Real -> Boolean,它的值为Real,但我也可以将此函数应用于Int

    1热度

    1回答

    我一直在开发一些游戏的不同事件系统,其中侦听器接收到通用事件类型对象,并且必须将其真实类型与开关或类似对象进行区分,然后将其转换为正确的子类事件。 不同aproaches我能后摆脱使用结构的开关情况如下(简化): public class Event {} public class EventA : Event {} public class EventB : Event {} publi

    2热度

    1回答

    我要寻找一种模式,从现有的创建新实例,这样我可以通过遍历它上面的层次结构计算瓷砖的ultimateBase。我尝试以下但获得参数buildTile方法的基地“协变型在逆变位置发生”。是否有一种替代模式来构建依赖于先前实例的实例? trait Color trait Blue extends Color trait Green extends Color trait Tile[+A] {

    6热度

    1回答

    我很努力地理解Java中的差异是如何工作的。 在以下示例中,我定义了一个函数test,它需要Consumer。该函数被定义为没有反转,因此我预计Consumer<Object>不是Consumer<Pair<Animal, Animal>>的子类型。然而,代码编译和测试接受lambda Variance:::superAction。 我错过了什么? import org.apache.common