Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将对象作为可比较参数发送到方法?_Java_Generics_Object_Casting_Comparable - Fatal编程技术网

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
发送错误声明的“提供的函数”。没有什么可以比,至少没有什么应该比得上。