来自加载类的Java Call类函数

时间:2011-02-25 03:21:15

标签: java classloader

如果可能的话,我如何在我加载的类中调用Main类中的函数? (我知道这是不可能理解的,所以我会解释)

即:

public class SomeClass
{
     public SomeClass
     {
          //load a class here
     }

     public void FuncToCall() {}
}

//In a separate file, dynamically loaded.
public class LoadedClass
{
     public LoadedClass
     {
          //Call a function in the class that loads this
          SomeClass.FuncToCall();
     }
}

所以我最终会得到2个文件:SomeClass.class和LoadedClass.class。我想我的主要问题是,如何在LoadedClass中引用SomeClass?

**编辑:

所以也许我应该更好地解释用例。 java程序从文件夹动态加载“SomeClass”脚本。然后,该脚本从Internet下载.jar文件,并在其中打开并运行“LoadedClass”脚本。如果SomeClass不在同一个.jar或.jar中,我如何在LoadedClass中的SomeClass中使用函数?

3 个答案:

答案 0 :(得分:0)

你就是这么做..

如果它们位于不同的包中,您必须导入该类或使用完全限定的名称。

让我看看我是否明白了。

检查此运行示例并修改源代码:

C:\Users\oreyes\java>type SomeClass.java LoadedClass.java Main.java
//SomeClass.java
public class SomeClass{
     public SomeClass () /* added () */ {
          //load a class here
          LoadedClass lc = new LoadedClass( this );
     }
     public  void funcToCall() {
         System.out.println("SomeClass.functToCall: Being invoked :)");
     }
}
//LoadedClass.java
//In a separate file, dynamically loaded.
public class LoadedClass {
     public LoadedClass( SomeClass sc )/*added () */ {
          //Call a function in the class that loads this
          //SomeClass.funcToCall();
          sc.funcToCall();
     }
}
//Main.java
//
public class Main {
    public static void main( String ... args ) {
        new SomeClass();
    }
}
C:\Users\oreyes\java>javac SomeClass.java LoadedClass.java Main.java
C:\Users\oreyes\java>java Main
SomeClass.functToCall: Being invoked :)
C:\Users\oreyes\java>

将装入程序类的引用传递给加载的是什么,从那里......只需调用该方法。

我希望这会有所帮助。

修改

根据您的评论,您需要的是使用Reflection

答案 1 :(得分:0)

你现在就做。

我们称之为 - >递归(如果从您调用的函数调用相同的函数) 或者只是..重定向..你一点一点地学习编程的潜力:D

欢迎使用StackOverflow:D 祝你好运!

答案 2 :(得分:0)

因为如果从另一个类调用一个类,则需要先创建一个对象。 (OOP) 示例:

Class X{ public functionX(){}}
Class Y { 
   X object = new X(); //Create an object to access to the function X
    public functionY(){ 
             object.functionX(); //you call the function from Class X
    }
}