采用未知参数的Java方法
java中有没有一种方法可以编写一个将未知对象作为参数的方法?对象将始终有一个公共方法,然后该方法将需要调用该方法。以下是一个例子:采用未知参数的Java方法,java,Java,java中有没有一种方法可以编写一个将未知对象作为参数的方法?对象将始终有一个公共方法,然后该方法将需要调用该方法。以下是一个例子: public void aMethod (MultipleObjects object){ object.commonMethod(); // Do some stuff here } 我不知道它叫什么(如果存在的话),所以很难在谷歌上搜索。你需要一个: 现在你的方法是: public void aMethod(MyInterface object) {
public void aMethod (MultipleObjects object){
object.commonMethod();
// Do some stuff here
}
我不知道它叫什么(如果存在的话),所以很难在谷歌上搜索。你需要一个:
现在你的方法是:
public void aMethod(MyInterface object) {
...
object.commonMethod();
...
}
public interface SomeInterface {
public void commonMethod();
}
现在,您可以将
MyClass
(或实现MyInterface
的任何其他类)的实例传递到aMethod()
您可以使所有这些类(共享公共方法)实现接口,因此您可以定义如下方法:
public void aMethod(SomeInterface obj) {
obj.commonMethod();
// ...
}
接口将是:
public void aMethod(MyInterface object) {
...
object.commonMethod();
...
}
public interface SomeInterface {
public void commonMethod();
}
通常的方法是定义一个只包含该方法的接口,然后确保传递给aMethod的所有类都实现该接口。例如:
interface CommonMethodHaver {
void commonMethod();
}
class Class1 implements CommonMethodHaver {
yadda yadda yadda;
void commonMethod() {
do class1-specific stuff here;
}
}
...
public void aMethod(CommonMethodHaver cmh) {
cmh.commonMethod();
// Do some stuff here
}
我知道很多人把你的问题解释为你想了解接口,但我把“编写一个将未知对象作为参数的方法”解释为如何编写一个处理未知对象的方法。正如其他答案已经告诉您的,除非它们共享一个公共接口,否则您不能让它们都调用相同的方法。但如果你问这个(我想你的问题就是这个),这就是你如何自定义处理不同的未知参数
public void aMethod(Object... object) {
if(object==null)
{
//whatever you want to do if no parameters are entered.
return;
}
for (Object o : object) {
if (o == null) {
continue; //what to do if null entered
}
if (o instanceof Integer) {
//whatever you want to do if it is an Integer
}
else if(o instanceof Double)
{
//whatever you want to do if it is a Double
}
else if(o instanceof Character)
{
//whatever you want to do if it is a Character
}
//and so on
}
}
如果您确实不知道将传入哪些对象,并且这些对象通过任何类型的公共基类或接口都不相关,那么您需要将该对象作为
对象
引用传入,并使用反射来确定该对象是否实现了要调用的方法。如果是这样,则再次使用反射来调用它。对象…
将是一个对象的数组。为什么要将其转换为int
?@Christian Object。。。也可以什么都不拿。我将其转换为int以演示如何将其作为另一种类型处理。我将重新编辑它来解释更多。它对这个问题有什么帮助?只是问一下。@Christian根据我如何阅读他的问题“未知对象作为参数?”意味着我如何创建一个可以接收任何数据类型的方法。OP希望对传入的对象调用一个公共方法。对象类不会声明此方法,因此此方法不起作用。解决方案是使用接口。您要传递的对象是否以任何方式(如公共基类或接口)相关?您是在问如何创建一个接受多个未知对象的方法,还是在问如何在您控制的不同类之间拥有一个共享方法?还是你在要求一些不可能的事情?谢谢你,我真不敢相信我的大脑会这么僵硬。我接受了你的答案,因为这是最清晰、最完整的解决方案。@Adil所以你想要传递的对象其实并不陌生。它们是已知的,并且可以共享一个接口。@Jason是的,我只是有一个思维障碍,看不出我需要创建一个接口,然后类需要实现该接口。我还没有写课程,所以我说“未知”。我应该说明我控制了传入的对象。谢谢