Java 使用通用对象的已知方法
我让一个类接收2个未知的通用对象x和y。如果它们是可比较的,我必须将它们与对象进行比较。我发现我可以通过使用Java 使用通用对象的已知方法,java,generics,comparable,Java,Generics,Comparable,我让一个类接收2个未知的通用对象x和y。如果它们是可比较的,我必须将它们与对象进行比较。我发现我可以通过使用instanceof检查对象是否实现了Comparable接口,但我不知道如何使用.compareTo方法,尽管我知道对象实现了它们- 我想做的基本上是,x和y是通用对象: public void someMethod(E x, E y) { if (x instanceof Comparable && y instanceof Comparable) {
instanceof
检查对象是否实现了Comparable
接口,但我不知道如何使用.compareTo
方法,尽管我知道对象实现了它们-
我想做的基本上是,x和y是通用对象:
public void someMethod(E x, E y) {
if (x instanceof Comparable && y instanceof Comparable) {
if(x.compareTo(y) < 0){ //The method compareTo(E) is undefined for the type E
//do stuff
}
}
}
public方法(ex,ey){
if(x可比实例和y可比实例){
如果(x.compareTo(y)<0){//,则类型E的方法compareTo(E)未定义
//做事
}
}
}
有人能给我指出正确的方向吗?检查后,您可以(也应该)安全地投射对象,以便根据需要使用它们
if (x instanceof Comparable && y instanceof Comparable) {
Comparable c1 = (Comparable) x;
Comparable c2 = (Comparable) y;
if(c1.compareTo(c2) < 0){
//do stuff
}
}
if(x个可比实例和y个可比实例){
可比c1=(可比)x;
可比c2=(可比)y;
如果(c1.与(c2)相比<0){
//做事
}
}
检查后,您可以(也应该)安全地投射对象,以便根据需要使用它们
if (x instanceof Comparable && y instanceof Comparable) {
Comparable c1 = (Comparable) x;
Comparable c2 = (Comparable) y;
if(c1.compareTo(c2) < 0){
//do stuff
}
}
if(x个可比实例和y个可比实例){
可比c1=(可比)x;
可比c2=(可比)y;
如果(c1.与(c2)相比<0){
//做事
}
}
您需要指定泛型类型绑定。现在,E
可以是任何对象
类型,但您似乎希望将其限制为实现可比
的任何类型,如下所示:
public <T extends Comparable<? super T>> void someMethod(T x, T y) {
if (x.compareTo(y) < 0) {
//do stuff
}
}
public您需要指定泛型类型绑定。现在,E
可以是任何对象
类型,但您似乎希望将其限制为实现可比
的任何类型,如下所示:
public <T extends Comparable<? super T>> void someMethod(T x, T y) {
if (x.compareTo(y) < 0) {
//do stuff
}
}
public您应该声明如下方法
public <E extends Comparable<E>> void someMethod(E x, E y)
public方法(ex,ey)
因此,在您的方法中,您可以确保使用compareTo方法。您应该像这样声明该方法
public <E extends Comparable<E>> void someMethod(E x, E y)
public方法(ex,ey)
因此,在您的方法中,您可以确保使用compareTo方法。好主意,但看起来他已经在类级别绑定了一个E
类型,因此将一个方法绑定到另一个方法中会使另一个方法相形见绌(这不是很好,而且在编码样式中经常被禁止)。只需将E
更改为另一个标识符(例如T
)即可解决此问题。这是个好主意,但看起来他已经在类级别绑定了E
类型,因此将其中一个方法用于某个方法会使另一个方法相形见绌(这不是很好,而且在编码样式中经常被禁止)。只需将E
更改为另一个标识符(例如T
)即可解决此问题。我不知道转换到接口是可能的,谢谢!回答正确,因为我不知道泛型元素implements.raw类型是否可以比较。我不知道转换到接口是可能的,谢谢!回答正确,因为我不知道泛型元素是否具有可比性。不应使用原始类型获得最佳结果使用获得最佳结果使用