我有这个我想要使用的功能:
boolean check(Comparable<Object> obj1, Comparable<Object> obj2) {
// do something
}
我有:
Object obj1,obj2;
我想发送给方法检查,如何将这两个对象转换或转换为可比较对象?
我希望我很清楚,谢谢你。
答案 0 :(得分:4)
正如你所说:
check((Comparable<Object>) obj1, (Comparable<Object>) obj2);
那就是说,我不知道任何实现Comparable<Object>
的类。该方法可能应该将Comparable<?>
作为参数而不是Comparable<Object>
。
答案 1 :(得分:3)
好吧,如果你的两个对象引用真正指向Comparable对象,你可以简单地执行
check((Comparable<Object>) obj1, (Comparable<Object>) obj2);
-EDIT -
当然这会产生警告,你基本上告诉编译器你知道的更好。编译器警告您,如果obj
与其泛型类型参数的确不同,那么您可能会出错。您可以使用注释告诉编译器关闭,您确实非常非常确定:
@SuppressWarnings("unchecked")
Comparable<Object> cmp1 = (Comparable<Object>) obj;
@SuppressWarnings("unchecked")
Comparable<Object> cmp2 = (Comparable<Object>) obj;
check(cmp1,cmp2);
当您使用@SupressWarning
注释时,通常会添加一条注释,说明为什么您非常确定不安全的投射将始终成功。
答案 2 :(得分:2)
不要使用
Object obj1, obj2;
而是
Comparable obj1, obj2;
答案 3 :(得分:0)
要发送到此方法的对象必须是Comparable
的类型。所以他们必须实现Comparable
接口。
Comparable obj1 = new Comparable() {
// ... realize compare method
}
然后您可以将此对象发送到您的函数。
如果你有这样的类实现接口:
public class MyClass implements Comparable {
// realize compare method
}