- PR -

変数(String型)の中にメソッド名が入ってるのですが、

投稿者投稿内容
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-11-11 15:04
引用:

かつやさんの書き込み (2004-11-11 13:21) より:
でも、またつまずきました。
呼び出したいメソッドは、同じクラス内ではなく、
すでに別クラスAでインスタンス化されたクラスB内のメソッドです。

これって、呼び出せるのでしょうか?


thisの代わりに対象となるインスタンスを参照する変数を使えばいいだけです。
かつや
ベテラン
会議室デビュー日: 2004/01/19
投稿数: 70
投稿日時: 2004-11-11 15:24
>thisの代わりに対象となるインスタンスを参照する変数を使えばいいだけです。

その変数が、クラスAで宣言されているので、クラスBからは見えないと思うのですが。

>Class#getDeclaredMethod()をClassB.classから呼んで、呼び出したいMethodの
オブジェクトを取り出し

クラスBからクラスAのメソッドオブジェクトって、どうやって取り出せるのでしょうか?
その手法で行き詰ってますTT
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-11-11 15:34
話が通じにくい様なので、コードを書いてしまいますね。
動作チェックはしていませんので、その辺は宜しくです。

コード:

class A{
 private B objB = new B();
 public B getB(){return objB;}
}

class B{
 public void execute(){System.out.println("called");}
}

public class Main{
 public static void main(String args[])throws Exception{
  A objA = new A();
  Method bexe = B.class.getDeclaredMethod("execute",null);
 bexe.invoke(objA.getB(),null);
 }
}


かつや
ベテラン
会議室デビュー日: 2004/01/19
投稿数: 70
投稿日時: 2004-11-11 15:42
>話が通じにくい様なので、コードを書いてしまいますね。

あのー…

クラスBのインスタンスの中で、Class#getDeclareMethod、Method#invoke等を使って、
クラスAのインスタンスのメソッドを呼び出したいんですが。。。

できるのかできないのかすらわからないです。。。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-11-11 15:48
うーん、要求に100%あうコードを書くまで許してもらえないですか…orz
多少のずれがあっても察してもらえると思った私が甘かった^^;

コード:

class A{
 public void execute(){System.out.println("called");}
}

public class B{

 private A objA = new A();

 public void any()throws Exception{
  Method aexe = A.class.getDeclaredMethod("execute",null);
 aexe.invoke(objA,null);
 }
}



Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-11-11 15:50
引用:

かつやさんの書き込み (2004-11-11 15:42) より:
クラスBのインスタンスの中で、Class#getDeclareMethod、Method#invoke等を使って、
クラスAのインスタンスのメソッドを呼び出したいんですが。。。


クラスBのメソッドの呼び出し時に、引数でクラスAのインスタンスを
メソッド名の文字列と一緒に渡してあげてください。
そして、thisの変りにそのインスタンスを使ってください。
かつや
ベテラン
会議室デビュー日: 2004/01/19
投稿数: 70
投稿日時: 2004-11-11 15:57
何度もすいません。でも、ダメなんです。
プログラムの構成としては、

public class Test {
public static void main(String args[]) {
ClassA AAA = new ClassA();
}
}

class ClassA {
ClassB BBB = null;
ClassC CCC = null;
// コンストラクタ
ClassA() {
BBB = new ClassB;
CCC = new ClassC;
}
// 呼び出されるメソッド
public testA() {
}
}

class ClassB {
// 呼び出すメソッド名称が入ってます
public testB(String method) {
// ClassAのメソッド呼び出し
// ClassCのメソッド呼び出し
}
}

class ClassC {
// 呼び出されるメソッド
public testC() {
}
}

こんな感じです。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2004-11-11 16:13
コード:
class ClassB {
  ClassA parent;

  ClassB(ClassA parent) {
    this.parent = parent;
  }
}


ClassB のインスタンスを作成するときに、ClassA への参照を渡しとけば?

スキルアップ/キャリアアップ(JOB@IT)