Java 如何将对象作为可比较参数发送到方法?
我提供了我想要使用的功能:Java 如何将对象作为可比较参数发送到方法?,java,generics,object,casting,comparable,Java,Generics,Object,Casting,Comparable,我提供了我想要使用的功能: boolean check(Comparable<Object> obj1, Comparable<Object> obj2) { // do something } 我想发送到方法检查,如何将这两个对象转换为可比对象 我希望我说得清楚,谢谢。好吧,如果你的两个对象引用真的指向可比较的对象,你可以简单地做到 check((Comparable<Object>) obj1, (Comparable<Object>)
boolean check(Comparable<Object> obj1, Comparable<Object> obj2) {
// do something
}
我想发送到方法检查,如何将这两个对象转换为可比对象
我希望我说得清楚,谢谢。好吧,如果你的两个对象引用真的指向可比较的对象,你可以简单地做到
check((Comparable<Object>) obj1, (Comparable<Object>) obj2);
当您使用
@supersswarning
注释时,通常会添加一条注释,说明为什么您如此肯定不安全强制转换总是会成功。好吧,如果您的两个对象引用确实指向可比较的对象,您只需添加注释即可
check((Comparable<Object>) obj1, (Comparable<Object>) obj2);
当您使用@supersswarning
注释时,通常会添加一条注释,说明为什么您如此肯定不安全强制转换将始终成功。不要使用
Object obj1, obj2;
而是
Comparable obj1, obj2;
不要使用
Object obj1, obj2;
而是
Comparable obj1, obj2;
正如你所说:
check((Comparable<Object>) obj1, (Comparable<Object>) obj2);
检查((可比)obj1,(可比)obj2);
也就是说,我不知道有哪个类实现了Comparable
。该方法可能应该将Comparable
作为参数,而不是像您所说的那样将Comparable
作为参数:
check((Comparable<Object>) obj1, (Comparable<Object>) obj2);
检查((可比)obj1,(可比)obj2);
也就是说,我不知道有哪个类实现了
Comparable
。方法可能应该将Comparable
作为参数,而不是Comparable
要发送到此方法的对象必须是Comparable
类型。因此,它们必须实现可比较的接口
Comparable obj1 = new Comparable() {
// ... realize compare method
}
然后可以将此对象发送到函数
如果您有自己的类,请以这种方式实现接口:
public class MyClass implements Comparable {
// realize compare method
}
要发送到此方法的对象的类型必须是可比较的
。因此,它们必须实现可比较的接口
Comparable obj1 = new Comparable() {
// ... realize compare method
}
然后可以将此对象发送到函数
如果您有自己的类,请以这种方式实现接口:
public class MyClass implements Comparable {
// realize compare method
}
@JBNizet:同意,但除非他告诉我们他使用的是什么类型,否则我们能做的最好的事情就是compariable
。是的。但你在回答中说了可比性。可比性和可比性不一样。或者<代码>可比。Compariable就是没有意义。我必须使用object,因为我是从obj1=obj.getClass().getField(str)获取它的代码>和解决方案:检查((可比)obj1,(可比)obj2)
正在发出警告。@JBNizet:同意,但除非他告诉我们他使用的是什么类型,否则我们只能做Comparable
。是的。但你在回答中说了可比性。可比性和可比性不一样。或者<代码>可比。Compariable就是没有意义。我必须使用object,因为我是从obj1=obj.getClass().getField(str)获取它的代码>和解决方案:检查((可比)obj1,(可比)obj2)代码>正在发出警告。我必须使用对象,因为我从obj1=obj.getClass().getField(str)获取它代码>和解决方案:检查((可比)obj1,(可比)obj2)
给出了一个警告。当然,它会生成一个警告,您基本上是在告诉编译器您知道得更好。编译器警告您,如果obj不是您所说的那样,您可能会出错。您可以告诉编译器您确实非常确定使用注释:@SuppressWarnings(“unchecked”)Comparable cmp=(Comparable)obj
我必须使用object,因为我从obj1=obj.getClass().getField(str)获得它代码>和解决方案:检查((可比)obj1,(可比)obj2)
给出了一个警告。当然,它会生成一个警告,您基本上是在告诉编译器您知道得更好。编译器警告您,如果obj不是您所说的那样,您可能会出错。您可以告诉编译器您确实非常确定使用注释:@SuppressWarnings(“unchecked”)Comparable cmp=(Comparable)obj
提供的方法我无法更改接口。和:检查((可比)obj1,(可比)obj2)代码>正在发出警告。它正在发出警告,因为由于类型擦除,无法检查对象是否实现了可比性。您很幸运,因为您的对象没有实现可比性。它可以实现可比,也可以实现原始可比。但这并不重要,因为类型无论如何都会被擦除,而check方法并不真正关心类型。如果您的对象实现了Comparable或Comparable,那么一切都可能正常工作。只是check方法没有正确的签名。如果提供了该方法,我无法更改接口。和:检查((可比)obj1,(可比)obj2)代码>正在发出警告。它正在发出警告,因为由于类型擦除,无法检查对象是否实现了可比性。您很幸运,因为您的对象没有实现可比性。它可以实现可比,也可以实现原始可比。但这并不重要,因为类型无论如何都会被擦除,而check方法并不真正关心类型。如果您的对象实现了Comparable或Comparable,那么一切都可能正常工作。只是check方法没有正确的签名。例如,我从下面得到obj1:obj1=obj.getClass().getField(str)代码>确保您的对象具有可比性?如果是这样的话,你可以试试这篇文章的其他答案。Try:可比comp1=(可比)obj1代码>如果不会出现异常,您可以发送到函数comp1
i get obj1,例如从以下内容:obj1=obj.getClass().getField(str)代码>确保您的对象具有可比性?如果是这样的话,你可以试试这篇文章的其他答案。Try:可比comp1=(可比)obj1代码>如果没有异常,您可以向您的函数comp1
发送错误声明的“提供的函数”。没有什么可以比,至少没有什么应该比得上。