在我的代码中我有(E和V是通用类型):
E info;
V v1, v1;
如果我写:
info = (E) v1 + v2
我收到错误:SparseGraph.java:163:operator +无法应用于V,V。
如何添加v1和v2以获得" info"中的结果?变量?正如您所看到的,我使用此代码创建了SparseGraph,而info是图表边缘的信息。如果边缘影响顶点" A"和顶点" B",信息应该是" AB"。
答案 0 :(得分:1)
您需要定义Add
操作才能执行此操作。这是因为添加的概念因使用不同类型而异。例如,5
+ 9
如果将它们视为整数,则会产生14
,但如果将它们视为字符串,则会得到59
(假设您使用的是默认实现字符串+
。
因此,简而言之,您的V
必须实现一个名为add
的方法(因为Java不支持operator overloading,如指出here),它需要一个或多个其他方法V
类型对象。在这种方法中,您将拥有您所描述的逻辑。
public V add(V source)
{
//logic to add sparse graphs.
}
此外,这一行:info = (E) v1 + v2
假设V
可以某种方式投放到E
。您可能还需要在V
中实现一个给出稀疏图形的方法,您可以获得优势。
根据你的问题:
另外做info =(E)v1.toString()+ v2.toString()是错误的吗?
在你的情况下是。在这种情况下,您正在做的是分别连接v1
和v2
的字符串表示。假设您在V
类中覆盖这样的方法,以便您可以打印可以使用的内容,字符串的+
运算符没有您需要的逻辑。此外,您需要将字符串转换为E
类型的对象,该对象最有可能失败。
答案 1 :(得分:0)
在Java中,您不能重载运算符。也就是说,您无法使用+
运算符直接对两个对象求和。相反,您需要实现add(Object)
方法。