以下是我的尝试:
public static <T> T[] sumArrays(T[] lhs, T[] rhs)
{
T[] out = new T[Math.max(lhs.length, rhs.length)];
for (int i = 0; i < Math.max(lhs.length, rhs.length); ++i){
if (i < Math.min(lhs.length, rhs.length)){
out[i] = lhs[i] + rhs[i];
} else if (i < lhs.length){
out[i] = lhs[i];
} else /* if (i < rhs.length)*/{
out[i] = rhs[i];
}
}
return out;
}
尽管编译错误,但我有一些观察。
为什么这个函数不在Java库中呢?Java库非常庞大。
我被激励使用泛型,就像你在C++中使用模板一样。
我担心会得到输入数据的深度拷贝;lhs和rhs。有人能让我放心吗?C++允许我传递一个常量引用;我会确定的。
使用泛型类型似乎是非法的,T[]实例化时出现了问题。我错过了什么?
编译器会优化我的重复代码Math.max(lhs.length, rhs.length)吗?
编译器不喜欢lhs[i] + rhs[i]。可能是因为它不知道T的类型,但是C++允许你这样做,因为它不会试图在知道类型之前编译模板。
在返回时,是否要对out进行深层复制?同样,C++编译器不会多进行一次复制。
也许我太老了,无法适应Java;-)
T
是未知的,这就是为什么你不能使用new T[]
的原因。 - blank