【发布时间】:2010-12-30 17:34:53
【问题描述】:
我第一次尝试使用泛型方法并且有点困惑。我创建了一个简单的例子来证明我可能会以错误的方式处理这个问题并且需要理顺。我正在使用 Eclipse 3.6.1。我的印象是编译器通过推理确定参数类型,但不确定为什么它迫使我在泛型方法中使用强制转换。这是一个简单的例子。
class Test1
{
Test1 () {};
public String getX () {return "Test1"};
};
class Test2
{
Test2 () {};
public String getX () {return "Test2"};
};
我的主要方法:
public static void main(String args[])
{
Test1 tst1 = new Test1();
Test2 tst2 = new Test2();
System.out.println("result: " + displayTest(tst1, tst2));
}
static <T,S> boolean displayTest(T x, S y)
{
System.out.println("X: " + ((Test1) x).getX());
System.out.println("Y: " + ((Test2) y).getX());
if (((Test1) x).getX().equals(((Test2) y).getX()))
return true;
else
return false;
}
我认为编译器会知道在这种情况下T 是Test1 的一个实例,而S 是Test2,但在Eclipse 中,getX 不是一个有效的方法。为了让它编译,它迫使我将对象转换为正确的类型,在我看来这违反了泛型方法的一般原则。
显然,我没有得到这个并且做错了什么。那么编译器如何知道泛型方法中的类型是什么?这样的事情应该怎么做?在我试图实现这一点的大型系统中,我有几种方法可以对不同类型的对象进行操作,并试图使它们具有通用性。即方法 1 调用方法 2(它使用泛型类型),后者又调用方法 3(再次传递泛型类型)。我希望只有函数调用的开始(在这种情况下调用方法 1)需要知道对象是什么类型,并且所有后续方法都只是泛型方法。
非常感谢。
【问题讨论】: