通过将对象作为参数传递来在方法中使用对象

Using an object in a method by passing it as a parameter

我面临涉及 class 和方法的情况。

为简单起见,假设您有 2 个 classes:A 和 B

在 class A 中,我有一个名为 "jumpOnOtherClass" 的方法。 在 class B 中,我有另一个方法叫做 "doThings".

我想要 class 方法将任何 class 的任何对象作为参数,以便它首先检查对象是否为 null(因此它可以创建一个新实例传递的对象),然后执行对象的class.

的一个方法

这是一个示例代码:

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
  }
}

我知道有例外情况需要考虑,但对于这个例子,我们假设 class,方法存在并被发现:)

我用 "java.lang.reflect" 尝试过,但这似乎不是实现我尝试做的事情的好方法...

任何帮助都会非常好!

谢谢,祝你有愉快的一天!

我不完全确定我理解这个问题,但看起来您可能正在寻找一种方法来区分 类 最初作为对象传递的?您可以使用 instanceof 关键字,然后冒一些强制转换异常的风险

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();
    else if (objectFromAnyClass instanceof B) {
         if (methodToInvoke.equals("doThings")) 
            ((B) objectFromAnyClass).doThings();
    }
  }
}

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

唯一的问题是,如果引用为 null,您无法在运行时真正知道 "object" 的 class,因此您需要通过提供其他信息来解决此问题。

我建议这种方法(它确实涉及反射):

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");

好的!我终于明白了!所以这是最终代码:

class A
{
  public <T> void jumpOnOtherClass(T objectFromAnyClass, Class<T> classType, String methodToInvoke) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException
  {
    if(objectFromAnyClass == null)
    {
      println("instantiating");
      objectFromAnyClass = classType.newInstance();
    }

    println("getting the method");
    classType.getMethod(methodToInvoke).invoke(objectFromAnyClass);

    println("It works :D");
  }
}

static class B
{  
  public void doThings()
  {
    println("message from class B");
  }
}

问题实际上来自处理过程中的 class 嵌套(一般来说,任何 class 嵌套)。我从检查对象 b 是否为 null 的行中删除了 "getConstructor()" 。

也许有人可以在此 post 下解释为什么删除此方法后一切正常...我将尝试理解,如果我对此有所了解,那将是 post在这里!

再次感谢你们的帮助:D

祝你有愉快的一天!

Larry.K