2017-04-16 1 views
2

내가 A 클래스의 객체를 someMeth(Object o)의 인수로 넣으면이 객체 메소드에 어떻게 액세스 할 수 있습니까? 나는 바꿀 수 없거나 someMeth(Object o)을 능가한다. 그럼 당신이 할 수있는Object 매개 변수에서 클래스를 가져 오는 방법은 무엇입니까?

A newObj = (A) o; 

:

newObj.setS("example"); 

또는 짧은, 한 줄 버전 :

((A)o).setS("example"); 
을 그들은과 같이 A를 입력
... 
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를 전송 해 봅니다
2

시도해주세요. 참조의 형식을 변환 :

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

하지만 당신은 당신의 의도는 "구체적인 메소드를 호출"경우 오의 determinating없이 – nikolay

+1

을 인스턴스화하는 것을 할 수있는, 당신은 당신의 마음에 자동으로 인스턴스를 결정합니다. 인스턴스가 여러 개인 경우'setS()'메소드로'interface'를 만들고 인터페이스 타입으로'o'를 변환해야합니다. 'if' 문을 제거하면 객체는'A'의 인스턴스가 아니며'ClassCastException'을 잡을 수 있습니다. –

관련 문제