0

我有这个提供的功能,我想使用:

boolean check(Comparable<Object> obj1, Comparable<Object> obj2) {
   // do something
}

我有:

Object obj1,obj2;

我想发送到方法检查,如何将两个对象转换或转换为 Comparables ?

我希望我清楚,谢谢。

4

4 回答 4

4

如你所说:

check((Comparable<Object>) obj1, (Comparable<Object>) obj2);

也就是说,我不知道有任何类实现Comparable<Object>. 该方法可能应该Comparable<?>作为参数而不是Comparable<Object>.

于 2012-05-28T20:51:28.450 回答
3

好吧,如果你的两个对象引用真正指向 Comparable 对象,你可以简单地做

check((Comparable<Object>) obj1, (Comparable<Object>) obj2);

-编辑-

当然这会产生一个警告,你基本上是在告诉编译器你知道得更好。obj编译器警告您,如果就其泛型类型参数而言不是您所说的那样,您可能会出错。你可以告诉你的编译器闭嘴,你真的非常确定,使用注释:

@SuppressWarnings("unchecked")
Comparable<Object> cmp1 = (Comparable<Object>) obj;
@SuppressWarnings("unchecked")
Comparable<Object> cmp2 = (Comparable<Object>) obj;     
check(cmp1,cmp2);

当您使用@SupressWarning注释时,您通常会添加一条注释,说明您为什么如此肯定地确定不安全的强制转换总是会成功。

于 2012-05-28T20:50:37.373 回答
2

不要使用

Object obj1, obj2;

反而

Comparable obj1, obj2;
于 2012-05-28T20:50:45.473 回答
0

您要发送到此方法的对象必须是Comparable. 所以他们必须实现Comparable接口。

Comparable obj1 = new Comparable() {
    // ... realize compare method
}

然后您可以将此对象发送到您的函数。

如果您有自己的类以这种方式实现接口:

public class MyClass implements Comparable {
    // realize compare method
}
于 2012-05-28T21:11:27.700 回答