一个复杂的术语,没有一个简单的谷歌搜索的良好解释......是否有更多的学术导向的人可以解释这个?
答案 0 :(得分:7)
两个答案大多是正确的。我会说参数化是多态的一种可能属性。如果多态项在所有实例化下表现相同,则多态性是参数化的。 “行为相同”是一个模糊,直观的术语。 John Reynolds引入了关系参数,作为对此的数学形式化。它指出多态术语保留所有关系,直观地迫使它表现相同:
考虑f:列表 - >一个列表。 如果我们有关系a~1,b~2,c~3,...,那么我们可以将它提升到列表中,例如 [a,d,b,c]〜[1,4,2,3]
现在,如果f([a,d,b,c])= [c,b,d,a]和f保持关系, 那么f([1,4,2,3])= [3,2,4,1]。 换句话说,如果f反转字符串列表,它也会反转数字列表。
因此,关系参数化多态函数不能“检查类型参数”,因为它们不能根据类型改变它们的行为。
答案 1 :(得分:2)
关系参数似乎是在类型上抽象的函数(如Java中的泛型)可以具有的属性。如果它具有此属性,则意味着它从不检查其类型参数或解构它/以某种特殊方式使用它。例如,此处的函数“id或inc”不是关系参数:
public class Hey<T>
{
public T idOrInc(T var)
{
if (var instanceof Integer)
return (T)(new Integer(((Integer)var).intValue()+1));
return var;
}
public static void main(String[] args) {
Hey<Integer> h = new Hey<Integer>();
System.out.println(h.idOrInc(new Integer(10)));
Hey<Double> h2 = new Hey<Double>();
System.out.println(h2.idOrInc(new Double(10)));
}
}
输出结果为:
$ java Hey
11
10.0
答案 2 :(得分:1)
好的,基于这个
,这里只会冒一个完整的猜测http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4276578
我会说它是参数多态(泛型)的数学表示。