在java中有没有办法编写一个将未知对象作为参数的方法?对象将始终具有该方法随后需要调用的公共方法。这是一个例子:
public void aMethod (MultipleObjects object){
object.commonMethod();
// Do some stuff here
}
我不确定这是什么(如果存在)所以很难在Google上搜索。
答案 0 :(得分:2)
您需要interface:
interface MyInterface {
void commonMethod();
}
class MyClass implements MyInterface {
// implement `commonMethod()`
}
现在你的方法是:
public void aMethod(MyInterface object) {
...
object.commonMethod();
...
}
您现在可以将MyClass
(或任何其他实现MyInterface
的类)的实例传递给aMethod()
。
答案 1 :(得分:2)
您可以使所有这些类(共享公共方法)实现接口,因此您可以定义如下方法:
public void aMethod(SomeInterface obj) {
obj.commonMethod();
// ...
}
界面如下:
public interface SomeInterface {
public void commonMethod();
}
答案 2 :(得分:2)
通常的方法是定义一个只包含该方法的接口,然后确保可能传递给aMethod的所有类都实现该接口。 E.g:
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
}
答案 3 :(得分:1)
如果您真的不知道将传入哪些对象并且这些对象与任何类型的公共基类或接口无关,那么您需要将对象作为Object
传递引用并使用反射来确定对象是否实现了您要调用的方法。如果是,那么你再次使用反射来调用它。
答案 4 :(得分:-1)
我理解很多人都在解释你的问题意味着你想知道接口,但我正在解释这个"编写一个方法,将一个未知的对象作为参数?"表示如何编写处理未知对象的方法。正如其他答案已经告诉你的那样,除非他们共享一个共同的界面,否则他们都会调用相同的方法。但是如果你要求这个(这是我认为你的问题要求),这就是你如何自定义处理不同的未知参数......
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
}
}