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

问题描述:

我有这样的规定,我想使用的功能:如何将Object作为可比参数发送给方法?

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

,我有:

Object obj1,obj2; 

,我要发送到的方法检查,我怎么能投或转换的两个对象可比较的?

我希望我很清楚,谢谢。

+1

的“提供的函数”错误地声明。没有什么实现可比较的,至少没有什么应该。它应该是可比较的。 – EJP

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

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

CNC中

当然这会产生一个警告,你基本上是告诉编译器,你知道更好。编译器警告你,如果obj不是你所说的泛型类型参数,那么你有可能会出错。你可以告诉你的编译器闭嘴,你是真的,真的很肯定的是,使用注释:

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

当您使用@SupressWarning注解你通常添加评论,说明为什么你如此积极确保不安全的投将永远成功。

+0

我不得不使用对象,因为我得到它从 'OBJ1 = obj.getClass()getfield命令(STR);' 和解决方案: '检查((可比)OBJ1,(可比)OBJ 2); ' 正在发出警告。 – nabil

+0

当然,它会产生一个警告,你基本上告诉编译器你知道得更好。编译器警告你,如果obj不是你说的那么真实,那么你有可能会错误。你可以告诉编译器你真的确实使用了注释:'@SuppressWarnings(“unchecked”)\t \t可比较的 cmp =(可比较的)obj' –

不要使用

Object obj1, obj2; 

而是

Comparable obj1, obj2; 
+2

原始类型?不,谢谢。 –

+0

@JBNizet:同意,但除非他告诉我们他正在使用什么类型,我们能做的最好的是'Comparable >'。 –

+1

是的。但你在答案中说Comparable。和Comparable >与可比较的不一样。 –

至于你说:

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

这么说,我不知道实现Comparable<Object>任何一类。该方法可能应该采用Comparable<?>作为参数而不是Comparable<Object>

+0

提供的方法我无法更改界面。和( ''支票((可比较的)obj1,(可比较的)obj2);' 正在发出警告。 – nabil

+2

这是一个警告,因为由于类型擦除,没有办法检查一个对象实现可比较。而且你很幸运,因为你的Object没有实现可比较的。它可以实现可比较的或原始可比较。但是这并不重要,因为无论如何都会擦除类型,而检查方法并不关心类型。如果您的对象实现了可比较的或Comparable,那么所有东西都可能工作。只是检查方法没有正确的签名。 –

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

然后你可以发送这个对象到你的函数。

如果你有自己的类实现界面是这样的:

public class MyClass implements Comparable { 
    // realize compare method 
} 
+0

我从这个例子得到obj1: 'obj1 = obj.getClass()。getField(str);' – nabil

+0

确定你的对象是可比较的?如果是这样,你可以试试这个帖子的其他答案。 尝试:'Comparable comp1 =(Comparable)obj1;'如果不存在异常,则可以发送到函数'comp1' – alaster