2014-04-14 101 views
2

有沒有在Java中的方式來寫這將需要一個未知的對象作爲參數的方法?對象將始終有一個方法需要調用的通用方法。這裏是一個例子:Java方法這需要未知參數

public void aMethod (MultipleObjects object){ 

object.commonMethod(); 
// Do some stuff here 
} 

我不確定這是叫什麼(如果存在),所以很難在Google上搜索。

+0

你正在傳遞以任何方式相關的物體,如一個共同的基類或接口? – Jason

+0

你問的是如何製作一個採用多個未知對象的方法,或者你問如何在由你控制的不同類之間共享方法?或者你在問一些不可能的事情? – CodeCamper

回答

2

你需要一個interface

interface MyInterface { 

    void commonMethod(); 

} 

class MyClass implements MyInterface { 

    // implement `commonMethod()` 

} 

現在你的方法是:

public void aMethod(MyInterface object) { 
    ... 
    object.commonMethod(); 
    ... 
} 

您現在還可以傳遞MyClass實例(或實現MyInterface任何其他類)aMethod()

+0

謝謝,我不能相信我有這樣的腦凍結。我接受了你的答案,因爲這是最清晰和最完整的解決方案。 – Adil

+0

@Adil,所以你想傳遞的對象畢竟不是未知數。他們是已知的 - 並且可以共享一個界面。 – Jason

+0

@Jason是的,我只是有一個腦袋,只是看不到我需要創建一個接口,然後類需要實現接口。我還沒有寫過這些課程,所以我說不出來。我應該澄清,我控制了傳入的對象。謝謝。 – Adil

2

可以使所有這些類(共享公用方法),以實現一個接口,讓你這樣定義的方法:

public void aMethod(SomeInterface obj) { 
    obj.commonMethod(); 
    // ... 
} 

的接口將是:

public interface SomeInterface { 
    public void commonMethod(); 
} 
2

通常方法是定義一個只包含該方法的接口,然後確保所有可能傳遞給方法的類實現該接口。例如: -

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 
} 
-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 
} 
} 
+0

'Object ...'是一個Object對象的數組。你爲什麼要把它轉換成「int」? – Christian

+0

@Christian對象...也可以不採取任何措施。我將它轉換爲int來演示如何將它作爲另一種類型處理。我將重新編輯它來解釋更多。 – CodeCamper

+0

它對問題有用嗎?只是問問。 – Christian

1

如果你真的不知道什麼對象將被傳入並且這些對象不通過任何類型的公共基類或接口相關聯,那麼您將需要將該對象作爲Object引用傳入,並使用反射來查找該對象是否實現了要調用的方法。如果是這樣,那麼你再次使用反射來調用它。