草庐IT

Covariance

全部标签

C# 转换继承的通用接口(interface)

我在转换我想出的界面时遇到了一些麻烦。它是C#Windows窗体的MVP设计。我有一个IView类,我在我的表单类上实现了它。还有一个IPresenter,我派生到各种特定的Presenter中。每个Presenter将根据角色以不同方式管理IView,例如打开对话框以使用AddPresenter输入一组新数据,而不是使用EditPresenter编辑现有数据,后者会将数据预加载到表单中。其中每一个都继承自IPresenter。我想这样使用代码:AddPresenterpres=newAddPresenter();我基本上可以正常工作,但是这些演示者和它们管理的View被捆绑到插件中,

c# - 了解 C# 4.0 中的协变和逆变

我在第9channel看了一段关于它的视频,但我并没有真正理解它。有人可以给我一个简单易懂的例子吗?在那之后可能如何在实践中使用它? 最佳答案 你可能想看看这个博客,他解释得很好,但我认为需要更多的例子来为人们澄清,因为这进入了一个非常难以理解的领域,但是,文章下面的引述很好地总结了这一点。http://hestia.typepad.com/flatlander/2008/12/c-covariance-and-contravariance-by-example.html"covarianceandcontravariance"me

java - Java 中的不变性、协变性和逆变性

Javalessonongenerics带我去variance概念。这让我有些头疼,因为我找不到一个非常简单的演示来说明它是什么。我读了几本similarquestionsonstackoverflow,但我发现它们对于Java学习者来说太难理解了。其实问题在于泛型的解释需要理解方差,而方差概念的论证很大程度上依赖于对泛型的理解。我有一些希望阅读this,但最后我分享了C.R.的感受:Thetitleremindsmeofthedayslearninggeneralrelativity.–C.R.Dec22'13at7:34四道理论题让我很困惑,我找不到很好的简单解释。以我目前的部分理

java - Java List 在初始化期间是否表现为协变类型?

我知道Java中的列表是不变的。所以下面的第二条语句给出了预期的编译错误Listintegers=Arrays.asList(1,2,3);Listnumbers=integers;但是,所有这些都工作正常Listnumbers1=Arrays.asList(1,2,3);Listnumbers2=Arrays.asList(1,2,3);Listnumbers3=Arrays.asList(1,2,3);所以我的问题是上面最后一条语句是如何编译的?我明白Arrays.asList()接受来自其调用者的类型,但我认为Arrays.asList(1,2,3)谁会解析为最接近的类型List

java - 如何确保仅协变地使用类型参数?

假设我有一个通用接口(interface)Source这是T的纯生产商对象。作为一个纯粹的生产者是接口(interface)契约的一部分。所以itisareasonableexpectation无论你能用Source做什么,如果你有Source也应该可以做到.现在我需要在Source的正文中强制执行此限制,这样就不会有人不小心使用了T以一种与该契约(Contract)相矛盾的方式。来自JDK的示例正如@Miserable.Variable指出的那样,ArrayList和ArrayList不等价。那是因为ArrayList作为通用类型不是协变的。或者换句话说,ArrayList不是T的纯

Java:方法参数中的协变通配符边界

我对通配符边界的规则感到困惑。好像有时候声明一个bound不满足类声明的bound的方法参数是可以的。在下面的代码中,方法foo(...)可以正常编译,但bar(...)不能。我不明白为什么允许其中任何一个。publicclassTestSomething{privatestaticclassA{}publicstaticvoidfoo(A>a){}publicstaticvoidbar(A>a){}} 最佳答案 让我们首先考虑方法voidfoo(A>a).A>与A“兼容”因为存在通配符类型P,和一个类似的通配符类型Q满足以下条件:

java - Scala,不喜欢 java 集合 API?

我正在使用asynchttpclient。构建参数时,将java.util.Map传递给setParameters方法。(Java)签名如下所示:setParameters(Map);真正的第1天内容。但是,哇,我正试图从Scala调用它,但我终其一生都无法创建一个集合来匹配该签名。这是我到目前为止造成的困惑。varm:java.util.Map[java.lang.String,java.util.Collection[java.lang.String]]=newjava.util.HashMap[java.lang.String,java.util.HashSet[java.lan

协方差(Covariance)

协方差1.协方差1.1相关性1.2计算协方差1.3协方差与相关性1.4协方差能让我们知道些什么信息?1.5协方差无法让我们知道哪些信息?1.协方差笔记来源:Covariance,ClearlyExplained!!!在概率论与统计学中用于衡量两个随机变量的联合变化程度协方差衡量的是一个变量的变化会如何影响另一个变量的变化,测量的是两个变量之间的线性相关程度1.1相关性以细胞中的基因X和基因Y的数量为例,下面给出了5个细胞中,每个细胞分别含有的基因X和基因Y的数量,我们计算出了这5个细胞含基因X数量的样本均值xˉ\bar{x}xˉ和含基因Y数量的样本均值yˉ\bar{y}yˉ​,我们观察这细胞中

Java 协方差

我很难弄明白这一点。假设我有以下代码:classAnimal{}classMammalextendsAnimal{}classGiraffeextendsMammal{}...publicstaticListgetMammals(){return...;}...publicstaticvoidmain(String[]args){Listmammals=getMammals();//compilationerror}为什么赋值会导致编译错误?错误类似于:Typemismatch:cannotconvertfromListtoList根据我对协方差的理解,getMammals()方法返回

java - List<List<String>> 是 Collection<Collection<T>> 的实例吗?

我编写了这个方便的通用函数,用于将集合的集合转换为单个集合:publicstaticSetmakeSet(Collection>a_collection){Iterator>it=a_collection.iterator();Setresult=newHashSet();while(it.hasNext()){result.addAll(it.next());}returnresult;}然后我试着调用它:List>resultLists=...;SetlabelsSet=CollectionsHelper.makeSet(resultLists);我收到以下错误:makeSet(j