パラメータとして渡すことによって、メソッド内のオブジェクトを使用して

ラリーI:

私は、クラスやメソッドを必要とする状況に直面しています。

AとB:それはシンプルにするために、想像あなたは、2つのクラスを持っています

クラスAで、私はと呼ばれる方法は、たとえば、「jumpOnOtherClass」をすることができます持っています。クラスBでは、私は「doThings」と呼ばれる別の方法があります。

私は(それが渡されたオブジェクトの新しいインスタンスを作成することができるように)オブジェクトがnullの場合はそれを最初にチェックすることを、引数として、任意のクラスの任意のオブジェクトを取るために、クラスAのメソッドを好きで、そのオブジェクトの方法を実行したいですクラス。

ここでは例のコードは次のとおりです。

class MyMainClass
{
  private A objectA = new A();
  private B objectB;

  public void main()
  {
    this.objectA.jumpOnOtherClass(this.objectB,"doThings");
  }
}

class A
{
  public void jumpOnOtherClass(Object objectFromAnyClass, String methodToInvoke)
  {
    if(objectFromAnyClass == null) objectFromAnyClass = new DefaultConstructorOfB();

    objectFromAnyClass.getMethod(methodToInvoke);
  }
}

class B
{
  public void doThings()
  {
    //Do some stuff here
  }
}

私は考慮して取るべき例外があります知っているが、例えば、私たちは、クラス、およびメソッドが存在し、発見されたと仮定します:)

私は「java.lang.reflectの」で物事をしようとしたが、私がやろうものを達成するための良い方法ではないようです...

すべてのヘルプは本当にいいですね!

おかげで、良い一日を!

ハレックス:

唯一の問題は、参照がnullの場合は、追加情報を提供することによって、この問題を解決する必要がありますので、あなたが本当に、実行時に「オブジェクト」のクラスを知ることができないということです。

私は(それが反射を伴わない)、このアプローチをお勧め:

public <T> void jumpOnOtherClass(T objectFromAnyClass, Class<T> classType, String methodToInvoke)
            throws
            NoSuchMethodException,
            IllegalAccessException,
            InvocationTargetException,
            InstantiationException
    {
        if(objectFromAnyClass == null) 
            objectFromAnyClass = classType.getDeclaredConstructor().newInstance();

        classType.getMethod(methodToInvoke).invoke(objectFromAnyClass);
    }

そして、このようにそれを使用します。

jumpOnOtherClass(this.objectB, B.class, "doThings");

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=394064&siteId=1