Java从加载的类调用类函数
如果可能的话,我将如何在我加载的类中调用主类中的函数?(我知道这是不可能理解的,所以我会解释) 即: 所以我最终会有两个文件:SomeClass.class和LoadedClass.class。我想我的主要问题是,如何引用LoadedClass中的某个类 **编辑: 所以也许我应该更好地解释这个用例。java程序从文件夹中动态加载“SomeClass”脚本。然后,该脚本从internet下载一个.jar文件,并在其中打开并运行“LoadedClass”脚本。如果某个类不在同一个.jar或.jar中,我如何在LoadedClass中的某个类中使用函数?您只需这样做 如果它们在不同的包中,则必须导入类或使用完全限定名 让我看看我是否明白了 检查此正在运行的示例,并对源代码进行修改:Java从加载的类调用类函数,java,classloader,Java,Classloader,如果可能的话,我将如何在我加载的类中调用主类中的函数?(我知道这是不可能理解的,所以我会解释) 即: 所以我最终会有两个文件:SomeClass.class和LoadedClass.class。我想我的主要问题是,如何引用LoadedClass中的某个类 **编辑: 所以也许我应该更好地解释这个用例。java程序从文件夹中动态加载“SomeClass”脚本。然后,该脚本从internet下载一个.jar文件,并在其中打开并运行“LoadedClass”脚本。如果某个类不在同一个.jar或.jar
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>
a所做的是将loader类的引用传递到loaded中,然后从那里…调用该方法
我希望这有帮助
编辑
根据您的评论,您需要的似乎是立即使用
我们称之为-->递归性(如果从调用的函数中调用相同的函数)
或者干脆。。重定向。。您将一点一点地了解编程的潜力:D
欢迎来到StackOverflow:D
祝你好运 因为如果从另一个类调用一个类,则需要在调用之前创建一个对象。(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
}
}
欢迎来到堆栈溢出!我想我不完全理解你的问题。你能详细说明一下你正在尝试做什么,以及为什么你目前的方法不起作用吗?嗯,我还没有真正尝试编译它。我想我应该试试。也许我有恐惧症。当然,这两个都不在任何包中。我正在为一个只需要您实现其接口的程序编写脚本。我想编写一个加载不同脚本的加载程序。因此,加载程序或脚本都不在任何包中。那么我该如何引用它们呢?或者我必须引用它们吗?如何使用Class.newInstance()传递参数?哦。。我懂了。你不能,你必须用
class.forName()
加载类,然后从返回的类objetct中获取一个接收类型的构造函数,然后用构造函数创建它。newInstance
方法:你要找的是“反射”,我能够编译代码并运行它。除了调用onStart()函数外,我得到一个java.lang.NoClassDefFoundError。我尝试编译。它不知道我试图从哪个类调用。因为如果你从另一个类调用一个类,你需要先创建一个对象。(OOP)看看大答案示例:classx{public functionX(){}}classy{public functionY(){X object=new X();//创建一个对象来访问函数X object.functionX();//从类X}调用函数
问题仍然在于,X和Y都不在一个包中,而是在不同的文件中。在这种情况下,您如何引用它们?即使它们是单独的文件。。如果它们在同一个项目中
,您可以调用它。但是,在外部创建对象。我更新我的答案
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
}
}