2017-04-16 8 views
2

引数としてAクラスのオブジェクトをsomeMeth(Object o)とすると、どうすればこのオブジェクトメソッドにアクセスできますか?私は変更やオーバーレイを行うことはできません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

ので、同じようAを入力し、それらにオブジェクトoをキャストしてみてください。

A newObj = (A) o; 

次に、あなたが行うことができます:

newObj.setS("example"); 

も短く、1行のバージョン:

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

試す参照の型に変換する:

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

ですが、あなたの目的は、「具体的なメソッドを呼び出す」の場合はOのdeterminatingが – nikolay

+1

をインスタンス化せずに、あなたの心の中でインスタンスを自動的に決定することを行うことができます。いくつかのインスタンスがある場合は、 'setS()'メソッドを使って 'interface'を作成し、' o'をインタフェースの型に変換する必要があります。 'if'文を削除すると、' A'のインスタンスではないオブジェクトは 'ClassCastException'を捕まえることができます。 –

関連する問題