2017-04-16 73 views
2

如果我把A類的對象作爲參數someMeth(Object o),我怎樣才能訪問這個對象方法?我不能改變或overrdie someMeth(Object o)如何從Object參數獲取類?

... 
void someMeth(Object o) { 
    o.setS("example"); -- exception : setS() is undefined for type Object 
} 
... 
class A { 
    private String s; 
    String getS() { 
     return s; 
    } 
    void setS(String value) { 
     s = value; 
    } 

} 
... 
someMeth(new A()); 
+0

這只是糟糕的設計 – MCMastery

回答

2

嘗試鑄造對象o他們鍵入A像這樣:

A newObj = (A) o; 

然後,你可以這樣做:

newObj.setS("example"); 

或者更短,一個行版本:

((A)o).setS("example"); 
2

試試轉換的引用類型:

void someMeth(Object o) { 
    if (o instanceof A) { 
     ((A) o).setS("example"); 
    } 
} 
+1

但你可以做,沒有鄰確定的研究實例 – nikolay

+1

如果您的目的是「調用具體的方法」,你在你的頭腦自動確定實例。如果你有幾個實例,你需要用'setS()'方法創建'interface'並將'o'轉換爲你的接口類型。如果你刪除'if'語句並且對象不是'A'的實例,你可以捕獲'ClassCastException'。 –