采用未知参数的Java方法

采用未知参数的Java方法,java,Java,java中有没有一种方法可以编写一个将未知对象作为参数的方法?对象将始终有一个公共方法,然后该方法将需要调用该方法。以下是一个例子: public void aMethod (MultipleObjects object){ object.commonMethod(); // Do some stuff here } 我不知道它叫什么(如果存在的话),所以很难在谷歌上搜索。你需要一个: 现在你的方法是: public void aMethod(MyInterface object) {

java中有没有一种方法可以编写一个将未知对象作为参数的方法?对象将始终有一个公共方法,然后该方法将需要调用该方法。以下是一个例子:

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是的,我只是有一个思维障碍,看不出我需要创建一个接口,然后类需要实现该接口。我还没有写课程,所以我说“未知”。我应该说明我控制了传入的对象。谢谢