有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我面临着一种涉及课堂和方法的情况

简单地说,假设你有两个类:A和B

在A类中,我有一个方法,比如说,“jumpOnOtherClass”。 在B类中,我有另一个名为“doThings”的方法

我希望类A方法将任何类的任何对象作为参数,以便它首先检查对象是否为null(以便它可以创建所传递对象的新实例),然后执行对象类的方法

下面是一个示例代码:

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”尝试过一些东西,但这似乎不是实现我尝试的目标的好方法

任何帮助都会很好

谢谢,祝你今天愉快


共 (2) 个答案

  1. # 1 楼答案

    好的!我终于明白了!下面是最后的代码:

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

    问题实际上来自于通过处理(以及通常的任何类嵌套)进行的类嵌套。我从检查对象b是否为空的行中删除了“getConstructor()”

    也许有人可以在这篇帖子下解释为什么删除这个方法会让一切都正常。。。我会尽力理解的,如果我有关于这方面的信息,就会贴在这里

    再次感谢你们的帮助:D

    祝你今天愉快

    拉里。K

  2. # 2 楼答案

    唯一的问题是,如果引用为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");