如何将Object作为可比参数发送给方法?

时间:2012-05-28 20:48:17

标签: java generics object casting comparable

我有这个我想要使用的功能:

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

我有:

Object obj1,obj2;

我想发送给方法检查,如何将这两个对象转换或转换为可比较对象?

我希望我很清楚,谢谢你。

4 个答案:

答案 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
}