2014-03-24 29 views
0

我目前正在实现一种算法来生成数据集中的高差异聚类。在我不同的测试,我将使用许多不同的数据类型,所以我需要让我的群类可用于任何数据类型T.所以,我有:告诉Java类<T> T中有一定的方法

public class Cluster<T> { 
    private int score; 
    private ArrayList<T> list; 
    private int k; 

,并能够评估的有效性这个算法,我们有一个基于集群中每个对象之间的距离计算得分。这里是computeScore()方法:

private void computeScore() { 
    if (list.size() < 2) score = 0; 
    else if (list.size() == 2) { 
     T x = list.remove(1); 
     T y = list.remove(0); 
     score = x.distanceTo(y); 
     list.add(y); 
     list.add(x); 
    } 
} 

的问题是,在computeScore()方法,因为对于类型T的distanceTo()方法是未定义的线score = x.distanceTo(y)引发错误。对于我所有的数据类型,我将在这里定义这个方法。如何告诉Cluster类,distanceTo()将被定义?

在此先感谢您的帮助。

+0

你在哪里定义'distanceTo'方法?对于所有支持的类型,它是否处于某种超级类型? –

回答

12

我想你可以使用<T extends YourClass>并在YourClass中定义distanceTo()

+0

是的,只是基础它。 – Davio

+2

我可能会定义一个'interface'来声明'distanceTo'。但它几乎是相同的解决方案。 – ajb

+0

似乎工作,但我需要将其扩展到我使用的所有数据类型类。我想我要实现一个名为DataType的类,它只包含distanceTo(),而我所有的数据类型类都将继承DataType。那么T只会扩展DataType。 –

0

这可以通过反射来实现;

像... x.getClass().getMethod("distanceTo", (Class<?>[]) T).invoke(x);

相关问题