将两种泛型类型添加到另一种类型中

时间:2014-01-28 07:43:28

标签: java generics generic-programming

在我的代码中我有(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"。

2 个答案:

答案 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()是错误的吗?

在你的情况下是。在这种情况下,您正在做的是分别连接v1v2的字符串表示。假设您在V类中覆盖这样的方法,以便您可以打印可以使用的内容,字符串的+运算符没有您需要的逻辑。此外,您需要将字符串转换为E类型的对象,该对象最有可能失败。

答案 1 :(得分:0)

在Java中,您不能重载运算符。也就是说,您无法使用+运算符直接对两个对象求和。相反,您需要实现add(Object)方法。