gpt4 book ai didi

java - 在 Java 中为泛型预定义乘法

转载 作者:行者123 更新时间:2023-11-30 05:53:32 27 4
gpt4 key购买 nike

因此,出于所有意图和目的,我正在尝试为自己实现 C++ 的 STL 算法 inner_product 的 java 版本,用于 vector 参数。到目前为止,我的代码(可能从根本上是错误的)如下所示:

public static<T,K> double inner_product(Vector<T> v1, Vector<K> v2)
{
double isum = 0;
for(int i=0;i<v1.size()&&i<v2.size();i++)
{
isum+=v1.elementAt(i)*v2.elementAt(i);
}

return isum;
}

问题是运算符 * 对于类型 T、K 是未定义的。然而,到目前为止,我的知识还没有涵盖预定义运算符,尽管据我所知这在 Java 中也是不可能的。在实现采用泛型的功能方面,我们将不胜感激。提前致谢。

最佳答案

没有好的方法可以做到这一点,原因有二:

  1. 类型参数(TK)必须引用对象类型,而不是基元。
  2. Java 没有运算符重载。

你能得到的最接近的是这样的(模语法错误,我的泛型生锈了):

public static<T extends Number,K extends Number> double inner_product(Vector<T> v1, Vector<K> v2)
{
double isum = 0;
for(int i=0;i<v1.size()&&i<v2.size();i++)
{
isum+=v1.elementAt(i).doubleValue()*v2.elementAt(i).doubleValue();
}

return isum;
}

这将适用于基本类型的对象包装器,即 Double 但不是 double

此外,与您的版本一样,无论传入什么类型,它都会返回 double。而且由于类型删除,这很难修复。

关于java - 在 Java 中为泛型预定义乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468853/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com