C++ 和 Java 在处理参数多态性方面有这种相似之处:两者都将类型参数推断为常规函数或方法,但要求程序员在调用构造函数时显式给出类型参数(尽管这在 Java 7 中已更改)。
这种行为背后的技术原因是什么?
编辑:我错误地认为这也适用于 Scala。下面是一个来自 Java 的示例:
class Foo<T> {
Foo(T x) { }
}
<T> void foo(T x) { }
Foo<Integer> f = new Foo(3);
foo(3);
这两个都是合法的,但第一个创建一个“原始类型”而不是 a Foo<Integer>
,并执行未经检查的赋值。