2017-04-16 44 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'。 –